powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборка товаров с последний изменением цены в SQL
9 сообщений из 9, страница 1 из 1
Выборка товаров с последний изменением цены в SQL
    #39911228
PauL Etta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер. Такая вот задача. Есть таблица с товарами, датами изменения цены и ценами (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
...
Рейтинг: 0 / 0
Выборка товаров с последний изменением цены в SQL
    #39911231
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIRST_VALUE(Цена) OVER (PARTITION BY Товар ORDER BY Дата DESC)
...
Рейтинг: 0 / 0
Выборка товаров с последний изменением цены в SQL
    #39911238
PauL Etta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Не получается. Как должен выглядеть итоговый запрос начиная с SELECT?
...
Рейтинг: 0 / 0
Выборка товаров с последний изменением цены в SQL
    #39911241
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
WITH RR AS
(
  SELECT T.[Товар],T.[Дата изменений],T.[Цена],
ROW_NUMBER(OVER PARTITION BY T.[Товар] ORDER BY T.[Дата изменений] DESC)AS XCOL
 FROM Table_5 AS T
)
SELECT X.*
FROM RR AS X WHERE X.XCOL=1
...
Рейтинг: 0 / 0
Выборка товаров с последний изменением цены в SQL
    #39911361
PauL Etta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
londinium, ваш запрос не работает:

Сообщение 156, уровень 15, состояние 1, строка 108
Неправильный синтаксис около ключевого слова "OVER".

Время выполнения: 2020-01-07T16:14:37.5609981+03:00
...
Рейтинг: 0 / 0
Выборка товаров с последний изменением цены в SQL
    #39911390
PauL Etta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На данном форуме никто еще не помог, полную белиберду пишут. Вопрос решил сам присвоив разные алиасы к одной таблице. Вообщем получилось так:

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
...
Рейтинг: 0 / 0
Выборка товаров с последний изменением цены в SQL
    #39911405
PauL Etta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось бы понять еще почему данный запрос через 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
...
Рейтинг: 0 / 0
Выборка товаров с последний изменением цены в SQL
    #39911410
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PauL Etta,

Да бухают все просто. В обычные дни здесь жизнь бьет ключом.

В вашем запросе:
Код: sql
1.
2.
3.
4.
5.
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

поле "Дата изменений" присутствует одновременно и в группировке, и в агрегатной функции. Поэтому получаете все строки, какие есть.
...
Рейтинг: 0 / 0
Выборка товаров с последний изменением цены в SQL
    #39911413
Remind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH CTE AS
(
  SELECT
    [Товар],
    [Дата изменений],
    [Цена],
    rn = ROW_NUMBER() OVER (PARTITION BY [Товар] ORDER BY [Дата изменений] DESC)
  FROM Table_5
)
SELECT *
FROM CTE 
WHERE rn = 1
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборка товаров с последний изменением цены в SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]