【问题标题】:How to SELECT COUNT DISTINCT?如何选择 COUNT DISTINCT?
【发布时间】:2013-06-19 22:45:42
【问题描述】:

我无法选择 COUNT distinct:我需要的答案是 6。 时间差异小于 300 秒,计为 1。 我的 sql:

SELECT COUNT(DISTINCT(cast([Date] as date) + cast([time] as datetime)))
FROM [Table1]WHERE [DATE] = '2013-06-22'
AND ErrCode = 'Scrubber Failure'AND Frequency = 1

【问题讨论】:

  • 您使用的是什么数据库系统?
  • 看起来像带有 [Date] 语法的 SQL 服务器
  • 亚历克斯 - SQL Server 2008
  • 如果你的条件结果重叠怎么办?
  • 重叠?只要时间差异低于 300 秒且同一组中的设备 = 'A'。仅计为 1。

标签: sql sql-server-2008 select distinct-values


【解决方案1】:

更新

SELECT COUNT(DISTINCT 
             ROUND(CONVERT(DECIMAL(20, 4), 
                     DATEDIFF(minute, 
                              CONVERT(datetime, '2013-01-01 00:00:00', 120), 
                              CONVERT(datetime, date + ' ' + time, 120))) / 5, 0)) n
  FROM table1
 WHERE date = '2013-06-22'
   AND errcode = 'Scrubber Failure'
   AND frequency = 1

输出:

| N | ----- | 6 |

这里是 SQLFiddle 演示。

【讨论】:

  • tq 回复...嗯,你正在与“2013-01-01 00:00:00”(固定日期)进行比较。嗯..我在想,如果有“2014-06-22”的数据会发生什么(已经更新了架构)。为什么用 (/5) 分隔?使用新模式,答案应该是 = 7。
  • 那么任何日期 2014-06-22sqlfiddle.com/#!3/1ebf0/1。结果是 7。
  • 嗯.. 我已经更新了架构。现在答案应该是 7。因为 DATEDIFF(SECOND,'2014-06-22 08:19:26','2014-06-22 08:20:26') 小于 300 秒。请建议。
  • @user2286756 你看到我更新的 sqlfiddle 了吗?你在哪里更新架构???如果您更改了我的 sqlfiddle,那么您应该点击 build schema 在您的浏览器中抓取一个新链接并将其发布到此处。
  • 查看更新的答案,这里是更新的 sqlfiddle sqlfiddle.com/#!3/b74cb/29,它会给你答案。
猜你喜欢
  • 2019-11-18
  • 2010-12-04
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
  • 2015-05-01
  • 1970-01-01
  • 2021-06-09
相关资源
最近更新 更多