【问题标题】:SQL count of non primary ID based on most recent date基于最近日期的非主 ID 的 SQL 计数
【发布时间】:2017-07-21 11:24:22
【问题描述】:

我有一个场景,我需要根据最新日期对 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

请提出建议。谢谢!

【问题讨论】:

  • 有了那个表数据,预期的结果是什么? (此处也有格式化文本。)
  • 您使用的是什么 RDBMS(MySQL、SQL-Server 等)?
  • 感谢您的回复.. 使用 SQL SERVER.. 实际上我需要 ID 的计数.. 预期结果将是.. IDCount 2

标签: sql date count


【解决方案1】:

我认为您想要每个 ID 的最大日期,因此您可以在以下内容中使用 MAXGROUP BY

SELECT ID, MAX(OccuredOn) AS OccuredOn
FROM tbl
GROUP BY ID

所以输出会是这样的:

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

更新

在子查询中,您可以将日期时间列转换为日期,每个 ID 取最大日期。在它选择每个不同 ID 的计数之后。尝试以下:

SELECT COUNT(OccuredOn) AS cnt
FROM (
    SELECT 
        ID, 
        MAX(CAST(OccuredOn AS DATE)) AS OccuredOn
    FROM #t
    GROUP BY ID
)x

【讨论】:

  • 预期结果是.. IDCount 2
  • @user2030293 Select count(distinct id) as IDCount; 将返回 2。
  • No.. 我使用了这个查询 SELECT count(distinct ID), MAX(OccuredOn) AS OccuredOn FROM tbl GROUP BY ID.. 但我的输出是 Count occuredOn 1 2017-07-21 08: 56:01.553 1 2017-07-21 08:42:21.377 我不想这样.. 查询应该返回 2
  • 根据您的要求,我的查询将准确返回一行,其中一列正好等于 2。为什么不?
  • @user2030293 编辑您的问题并提供更多详细信息,我无法理解您想要什么。正如你的问题:Distinct count of the ID based on the latest date.这到底是什么......?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
  • 1970-01-01
相关资源
最近更新 更多