Я знаю, что это, по-видимому, очень распространенная проблема, но, несмотря на все мои поиски здесь и в Google, я не могу адаптировать свои выводы к моему делу.
Я думал, что это будет очень просто, но я новичок в SQL, и я боюсь, что у меня нет логики для этого.
По сути, это мой набор данных:
список фолио (клиент), по дате, идентификатору для каждого фолио и дате, и если фолио изменяется, предыдущий сохраняется, но для того же фолио добавляются новые строки, а идентификатор увеличивается.
Date | Client | ProductCode | ID | Price
-----------|--------|-------------|----|--------
2019-01-01 | C1 | A | 1 | 100
2019-01-02 | C1 | A | 2 | 100
2019-01-03 | C1 | B | 3 | 100
2019-01-01 | C1 | A | 4 | 150
2019-01-02 | C1 | A | 5 | 150
2019-01-03 | C1 | B | 6 | 150
2019-01-02 | C2 | B | 1 | 150
2019-01-02 | C2 | X | 2 | 150
Требуемый вывод: для одной данной даты, если у меня есть дважды одно и то же фолио, я хочу только самый последний (самый высокий идентификатор) с соответствующей ценой (и, возможно, некоторыми дополнительными столбцами)
Date | Client | ProductCode | ID | Price
-----------|--------|-------------|----|--------
2019-01-01 | C1 | A | 4 | 150
2019-01-02 | C1 | A | 5 | 150
2019-01-03 | C1 | B | 6 | 150
2019-01-02 | C2 | X | 2 | 150
Я пытался перейти с:
SELECT Date, Client, ProductCode , Price, MAX(ID)
From myTable
Group BY Date, Client, ProductCode , Price
В случае, если у меня есть дважды одна и та же строка (с другим идентификатором), она работает, но если одно значение отличается (например, цена), то я получаю оба.
Затем я попытался перейти с ROW_NUMBER() over(partition by Client ORDER BY ID)
и затем выбрать MAX, но я просто создаю новый идентификатор и возвращаюсь на круги своя.
Я нашел много вопросов по этому поводу, но обычно с упрощенными примерами, и как только я добавляю свои дополнительные столбцы, я получаю больше строк, чем должен был.
Спасибо