我正在从数据库中查找信息以在日期时间列中查找最新时间。有时一个进程每天完成多次,我只想查看当天的最新消息。
我已尝试使用 INNER JOIN 语句,但我返回的是 MAX Date。
数据示例如下:
Time | Product
2019-01-01-22:15 | CHEESE
2019-01-01-22:35 | CHEESE
2019-01-02-22:35 | CHEESE
2019-01-02-22:37 | CHEESE
显示为
Time | Product
2019-01-01-22:35 | CHEESE
2019-01-02-22:37 | CHEESE
这将适用于多个产品
* 编辑 *
我需要这个用于一个月的多个日期
* 编辑 * 这将是当天的其他产品,奶酪就是其中的一个例子
所以:
Time | Product
2019-01-01-22:15 | CHEESE
2019-01-01-22:35 | CHEESE
2019-01-01-22:45 | BREAD
2019-01-01-22:57 | BREAD
2019-01-02-22:35 | CHEESE
2019-01-02-22:37 | CHEESE
2019-01-02-22:35 | BREAD
2019-01-02-22:37 | BREAD
显示为
Time | Product
2019-01-01-22:35 | CHEESE
2019-01-01-22:57 | BREAD
2019-01-02-22:37 | CHEESE
2019-01-02-22:37 | BREAD
最佳答案
一个选择是使用 top 1 with ties
和 row_number
with casting:
SELECT TOP 1 WITH TIES [Time], Product
FROM TableName
ORDER BY ROW_NUMBER() OVER(
PARTITION BY Product, CAST([Time] AS Date)
ORDER BY CAST([Time] AS Time) DESC)
row_number
将为每个日期的最晚时间返回 1。
另一种选择是使用像这样的公共(public)表表达式(或派生表):
WITH CTE AS
(
SELECT [Time],
Product,
ROW_NUMBER() OVER(
PARTITION BY Product, CAST([Time] AS Date)
ORDER BY CAST([Time] AS Time) DESC) As Rn
FROM TableName
)
SELECT [Time], Product
FROM CTE
WHERE Rn = 1
这样您就可以决定如何对结果进行排序。
https://stackoverflow.com/questions/54292937/