|
Выборка товаров с последний изменением цены в SQL
|
|||
---|---|---|---|
#18+
Добрый вечер. Такая вот задача. Есть таблица с товарами, датами изменения цены и ценами (3 колонки). SELECT* FROM Table_5 Товар Дата изменений Цена 1 2018-04-01 4 1 2018-04-02 8 1 2018-04-02 15 2 2018-04-04 16 2 2018-04-05 23 3 2018-04-06 42 3 2018-04-07 50 Нужно выбрать по каждому товару цену по последней дате изменения, по хронологии. Пишу запрос, но получается выбрать только 1 товар с последней датой, а нужно по каждому товару вычленить цену по последней дате. Т.е. к товаром 1,2,3 должны быть крайнее даты и цены, всего 3 строчки, а не одна. (пАмАгите) Вот мой запрос: SELECT Товар,[Дата изменений], Цена FROM Table_5 WHERE [Дата Изменений]= (SELECT TOP(1) [Дата Изменений] FROM Table_5 ORDER BY [Дата Изменений] DESC) Получается только один товар: Товар Дата изменений Цена 1 2018-04-01 4 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 21:17 |
|
Выборка товаров с последний изменением цены в SQL
|
|||
---|---|---|---|
#18+
FIRST_VALUE(Цена) OVER (PARTITION BY Товар ORDER BY Дата DESC) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 21:34 |
|
Выборка товаров с последний изменением цены в SQL
|
|||
---|---|---|---|
#18+
Akina, Не получается. Как должен выглядеть итоговый запрос начиная с SELECT? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 22:11 |
|
Выборка товаров с последний изменением цены в SQL
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 22:48 |
|
Выборка товаров с последний изменением цены в SQL
|
|||
---|---|---|---|
#18+
londinium, ваш запрос не работает: Сообщение 156, уровень 15, состояние 1, строка 108 Неправильный синтаксис около ключевого слова "OVER". Время выполнения: 2020-01-07T16:14:37.5609981+03:00 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2020, 16:15 |
|
Выборка товаров с последний изменением цены в SQL
|
|||
---|---|---|---|
#18+
На данном форуме никто еще не помог, полную белиберду пишут. Вопрос решил сам присвоив разные алиасы к одной таблице. Вообщем получилось так: SELECT* FROM Table_5 AS A WHERE [Дата Изменений]= ( SELECT MAX ([Дата изменений]) FROM Table_5 AS B WHERE A.Товар = B.Товар ) ORDER BY A.Товар Результат: Товар Дата изменений Цена 1 2018-04-03 15 2 2018-04-05 23 3 2018-04-07 50 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2020, 17:02 |
|
Выборка товаров с последний изменением цены в SQL
|
|||
---|---|---|---|
#18+
Хотелось бы понять еще почему данный запрос через CROSS JOIN или INNER JOIN не получается прописать. Получается не то что в подзапросах: SELECT A.Товар, MAX (A.[Дата изменений]), A.Цена FROM Table_5 A CROSS JOIN Table_5 B WHERE A.Товар = B.Товар GROUP BY A.Товар, A.[Дата изменений], A.Цена ORDER BY A.Товар ASC Итог не тот: Товар (Отсутствует имя столбца) Цена 1 2018-04-01 4 1 2018-04-02 8 1 2018-04-03 15 2 2018-04-04 16 2 2018-04-05 23 3 2018-04-06 42 3 2018-04-07 50 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2020, 17:25 |
|
Выборка товаров с последний изменением цены в SQL
|
|||
---|---|---|---|
#18+
PauL Etta, Да бухают все просто. В обычные дни здесь жизнь бьет ключом. В вашем запросе: Код: sql 1. 2. 3. 4. 5.
поле "Дата изменений" присутствует одновременно и в группировке, и в агрегатной функции. Поэтому получаете все строки, какие есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2020, 17:32 |
|
Выборка товаров с последний изменением цены в SQL
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2020, 17:40 |
|
|
start [/forum/topic.php?fid=46&gotonew=1&tid=1686682]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
603ms |
get topic data: |
10ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 714ms |
0 / 0 |