Можно ли запросить только первую и вторую дату клиента? Я пробовал делать ДО 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
некоторые ответы там: answers.sap.com/questions/607528/…
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. (Обратите внимание на средства доступа ~
в именах полей.)
Да, я понимаю это только через некоторое время. Перед тем, как вопрос был отредактирован и удален тег mysql, я сразу предположил, что это для mysql. Тем не менее, надеюсь, это может быть использовано в качестве идеи для @gwapo в его приложении.
Я не мог найти способ сделать это с помощью одного запроса в 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.
тег MySQL! Вы имеете в виду SQL?