Ограничьте строки первыми двумя датами в столбце. Как?

Можно ли запросить только первую и вторую дату клиента? Я пробовал делать ДО 2 СТРОК, но это ограничивает таблицу только двумя строками.

SELECT knvv~kunnr vbak~vbeln vbak~erdat FROM vbak INNER JOIN knvv ON vbak~kunnr = knvv~kunnr.

Примерный результат вышеуказанного запроса будет:

Customer no.    Document No            Date
1               100000                 01/01/18
1               200000                 01/02/18
1               300000                 01/03/18
1               400000                 01/04/18
2               100001                 01/01/18
2               200000                 01/04/18
2               100040                 01/06/18

Но что мне нужно, так это то, что он ограничивает только первые две даты для каждого клиента. Результат должен быть таким. Он должен соответствовать только первым двум датам каждого клиента, как показано ниже. Можно ли это сделать в запросе?

Customer no.    Document No            Date
1               100000                 01/01/18
1               200000                 01/02/18
2               100001                 01/01/18
2               200000                 01/04/18

тег MySQL! Вы имеете в виду SQL?

Sandra Rossi 21.08.2018 06:54

некоторые ответы там: answers.sap.com/questions/607528/…

Sandra Rossi 21.08.2018 15:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
218
2

Ответы 2

SELECT CustomerNo,DocumentNo,Date,(@Count:= if (@TempID - CustomerNo = 0,@Count +1,1)) Counter,(@TempID:=CustomerNo) Tempid
FROM vbak, (Select @Count:=0) counter, (Select @TempID:=0) tempid
having Counter<= 2 order by CustomerNo;

вы можете попробовать это. В основном я объявил 2 переменные (@Count и @TempID), и обе установлены как 0. Изначально для первой строки @TempID - CustomerNo = -1 делает условие ложным и устанавливает его в 1, а не увеличивает его. Затем @TempID устанавливается равным текущему CustomerNo этой строки.

Следующая строка создаст @TempID - CustomerNo = 0 и заставит условие быть истинным и увеличить @Count + 1.

Так далее и тому подобное,

Оператор Have выбирает счетчик, который меньше или равен 2, который затем возвращает желаемые результаты.

надеюсь, это даст вам представление о вашем приложении.

Работает на собственном SQL, но, судя по всему, он ищет запрос в варианте SAP OpenSQL. (Обратите внимание на средства доступа ~ в именах полей.)

Florian 22.08.2018 17:22

Да, я понимаю это только через некоторое время. Перед тем, как вопрос был отредактирован и удален тег mysql, я сразу предположил, что это для mysql. Тем не менее, надеюсь, это может быть использовано в качестве идеи для @gwapo в его приложении.

Ryan Tan 23.08.2018 03:51

Я не мог найти способ сделать это с помощью одного запроса в OpenSQL. Он просто не предлагает того типа подзапроса или оконной функции, которые потребуются.

Однако я заметил, что вы добавили тег hana. В SAP HANA это можно довольно легко реализовать с помощью процедуры базы данных, управляемой ABAP (AMDP), или эквивалентного представления вычислений с использованием сценариев:

METHOD select BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT
  USING vbak.

  lt_first_dates = SELECT kunnr,
                          min(erdat) AS erdat
                     FROM vbak
                     GROUP BY kunnr;

  lt_second_dates = SELECT kunnr,
                           min(erdat) AS erdat
                      FROM vbak
                      WHERE (kunnr, erdat) NOT IN ( SELECT * FROM :lt_first_dates )
                      GROUP BY kunnr;

  lt_first_two_dates = SELECT * FROM :lt_first_dates
                       UNION
                       SELECT * FROM :lt_second_dates;

  et_result = SELECT src.kunnr,
                     src.vbeln,
                     src.erdat
                FROM vbak AS src
                WHERE (kunnr, erdat) IN ( SELECT * FROM :lt_first_two_dates )
                ORDER BY kunnr, vbeln, erdat;

ENDMETHOD.

Другие вопросы по теме