Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于最近日期的非主ID的SQL计数_Sql_Date_Count - Fatal编程技术网

基于最近日期的非主ID的SQL计数

基于最近日期的非主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进行不同计数

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的不同计数。
这到底是什么。。。?