#sql #sql-server
#sql #sql-сервер
Вопрос:
надеюсь, у вас все хорошо, возникли некоторые проблемы с запросом данных, вы пытаетесь использовать разные ответы на предыдущие сообщения, но не можете их решить. Я получил данные для некоторых продуктов, и записи показывают, что за один день люди могут несколько раз изменять цену или себестоимость товара, поэтому мне нужно зафиксировать последнюю запись для каждого дня / товара. Это будет примером записей базы данных: Пример таблицы
Что бы вы предложили, чтобы вывести одну запись на дату для каждого элемента?
Я уже пробовал это, но он выводит одну и ту же дату для каждой записи:
SELECT
Product,
Date,
Price_of_item,
Cost_of_item
FROM server
WHERE DATE IN (SELECT MAX(DATE) FROM server GROUP BY DAY(DATE))
заранее благодарю вас
Комментарии:
1. Отметьте наш вопрос базой данных, которую вы используете.
2. Каков ваш ожидаемый результат. Пожалуйста, отредактируйте вопрос и покажите это. Спасибо.
Ответ №1:
Нам действительно нужно знать, какую базу данных вы используете, чтобы предоставить точные ответы. Надеюсь, один из этих вариантов подойдет вам
Использование общих табличных выражений:
WITH CTE AS (
SELECT product
,DAY(DATE) as day
,MAX(DATE) as maxdate
FROM server
GROUP BY product,DAY(DATE)
)
SELECT
CTE.Product,
CTE.MaxDate as Date,
s.Price_of_item,
s.Cost_of_item
FROM CTE
INNER JOIN server s
ON CTE.product=s.product and CTE.MaxDate=s.Date
Использование аналитических функций:
SELECT DISTINCT
product
,FIRST_VALUE(DATE) OVER (PARTITION BY Product,DAY(DATE) ORDER BY Date DESC) as Date
,FIRST_VALUE(Price_of_item) OVER (PARTITION BY Product,DAY(DATE) ORDER BY Date DESC) as Price_of_item
,FIRST_VALUE(Cost_of_item) OVER (PARTITION BY Product,DAY(DATE) ORDER BY Date DESC) as Cost_of_item
FROM server
Вывод из них должен быть:
Product Date Price of item Cost of item
C 2/9/2020 13:20 20 5
C 5/9/2020 18:10 22 8
A 12/9/2020 18:50 31 16