![](/img/trans.png)
[英]Oracle SQL: Selecting a single row with the latest date between multiple columns
[英]How to get single SQL row with latest Date + Time without considering irrelevant columns with different data?
在我的 SQL 查询中,我试图从具有每个项目编号的最新日期和时间组合的数据库中获取数据。
我的公式是:
select [Project], [Machine], [Category], [Details], MAX(date + ' ' + time) as [DateTime]
from [SQL].[dbo].[ZMAC] group by [Project No], [Machine], [Repair Category], [Details]
这是搜索结果的一部分
| Project | Machine | Category | Details | DateTime |
------------------------------------------------------------------------
| M00004 | A09 | QC | CENTER OVER | 2020-01-21 19:15:00.000 |
| M00004 | A09 | QC | FIRST CUT | 2020-01-21 19:00:00.000 |
| M00006 | C03 | QC | PUSHER UP | 2020-01-21 17:30:00.000 |
查询最终给了我 2 行M00004
因为 Details 不同。 我真正想要的是让表为每个项目返回 1 行。
| Project | Machine | Category | Details | DateTime |
------------------------------------------------------------------------
| M00004 | A09 | QC | CENTER OVER | 2020-01-21 19:15:00.000 |
| M00006 | C03 | QC | PUSHER UP | 2020-01-21 17:30:00.000 |
我如何告诉公式只显示最新的条目?
您可以使用ROW_NUMBER()
根据Datetime
降序为每个Project
生成值的有序列表,然后仅选择行号 = 1 的行:
WITH CTE AS (
SELECT [Project], [Machine], [Category],
[Details], date + ' ' + time as [DateTime]
ROW_NUMBER() OVER (PARTITION BY [Project] ORDER BY (date + ' ' + time) DESC) AS rn
FROM [SQL].[dbo].[ZMAC]
)
SELECT [Project], [Machine], [Category], [Details], [DateTime]
FROM CTE
WHERE rn = 1
在不存在的地方使用
select [Project], [Machine], [Category], [Details], [DateTime]
from [SQL].[dbo].[ZMAC] a
where not exists(
select 1
from [SQL].[dbo].[ZMAC] b where a.Machine = b.Machine and a.[DateTime] < b.[DateTime]
)
您可以通过以下链接找到有关 MAX(DATE) 的相关答案。...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.