繁体   English   中英

如何在不考虑具有不同数据的不相关列的情况下获取具有最新日期 + 时间的单个 SQL 行?

[英]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) 的相关答案。...

SQL Server:仅选择具有 MAX(DATE) 的行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM