基于最近日期的非主ID的SQL计数
我有一个场景,需要根据最新日期对ID进行不同计数基于最近日期的非主ID的SQL计数,sql,date,count,Sql,Date,Count,我有一个场景,需要根据最新日期对ID进行不同计数 ID OccurredOn 1717 2017-07-21 08:56:01.553 1719 2017-07-21 08:42:21.377 1719 2017-07-04 08:51:49.827 1719 2017-07-04 08:51:11.670 请建议。谢谢 我想您需要每个ID的最大日期,这样您就可以在下面使用max和GROUP BY
ID OccurredOn
1717 2017-07-21 08:56:01.553
1719 2017-07-21 08:42:21.377
1719 2017-07-04 08:51:49.827
1719 2017-07-04 08:51:11.670
请建议。谢谢 我想您需要每个ID的最大日期,这样您就可以在下面使用
max
和GROUP BY
:
SELECT ID, MAX(OccuredOn) AS OccuredOn
FROM tbl
GROUP BY ID
SELECT COUNT(OccuredOn) AS cnt
FROM (
SELECT
ID,
MAX(CAST(OccuredOn AS DATE)) AS OccuredOn
FROM #t
GROUP BY ID
)x
因此,输出将如下所示:
ID OccurredOn
1717 2017-07-21 08:56:01.553
1719 2017-07-04 08:51:49.827
另一种想法是,如果您想在SQL Server中获取最近一天的ID计数,可以尝试以下方法:
SELECT ID, MAX(OccuredOn) AS OccuredOn, MAX(cnt) AS cnt
FROM (
SELECT
ID,
ROW_NUMBER() OVER(PARTITION BY ID, CAST(OccuredOn AS DATE) ORDER BY OccuredOn ASC) AS cnt,
CAST(OccuredOn AS DATE)AS OccuredOn
FROM tbl
)x
GROUP BY ID
因此,输出将是:
ID OccuredOn cnt
1717 2017-07-21 1
1719 2017-07-21 1
更新
在子查询中,您可以将datetime列转换为date,每个ID取最大日期。然后选择每个不同ID的计数。请尝试以下操作:
SELECT ID, MAX(OccuredOn) AS OccuredOn
FROM tbl
GROUP BY ID
SELECT COUNT(OccuredOn) AS cnt
FROM (
SELECT
ID,
MAX(CAST(OccuredOn AS DATE)) AS OccuredOn
FROM #t
GROUP BY ID
)x
使用该表数据,预期结果是什么?(这里也是格式化文本。)您使用的是什么RDBMS(MySQL、SQL Server等)?谢谢您的回复。。使用SQL SERVER。。事实上,我需要这个ID的计数。。预期结果将是。。IDCount 2预期结果为。。IDCount2@user2030293
选择count(distinct id)作为IDCount代码>将返回2。否。。我已使用此查询从tbl GROUP BY ID中选择计数(不同ID)、最大值(发生时间)作为发生时间。。但是我的输出是2017-07-21 08:56:01.5531 2017-07-21 08:42:21.377我不想这样。。查询应返回2根据您的要求,我的查询将返回正好一行,正好一列等于2。为什么不?@user2030293编辑您的问题并提供更多详细信息,我不明白您想要什么。正如你的问题:基于最新日期的ID的不同计数。
这到底是什么。。。?