【问题标题】:Using Count with Duplicate date and time使用带有重复日期和时间的计数
【发布时间】:2018-06-05 10:03:44
【问题描述】:

我有一个有重复日期和时间的表,一些日期有重复的时间,但真的想使用 SQL 查询将其计为 1,distinct 不起作用,也不知道如何做到这一点有什么帮助?目的是计算每天每个注册号的下载量。例如 2018-01-08 有重复的 Starttime,应计为 1。

我的查询没有这样做。

Select  StartDate, Starttime, count(*) AS TOTALDOWNLOAD, RegisterNumber 
FROM            `SAMPLE.csv`
WHERE        (MaintenanceFlightTime > 0)
group by StartDate,Starttime, RegisterNumber 
RegisterNumber  StartDate   StartTime
    A         2017-11-27    19:22:17
    A         2017-11-27    19:45:39
    B         2017-11-29    14:09:30
    A         2017-11-28    21:51:38
    A         2017-11-30    17:09:34
    B         2017-12-01    15:19:35
    A         2017-12-01    19:31:42
    B         2017-12-02    14:59:28
    B         2017-12-03    17:38:39
    B         2017-12-03    19:09:19
    B         2017-12-04    10:16:24
    B         2017-12-04    13:43:37
    B         2017-12-05    06:37:22
    A         2017-12-05    10:24:37
    A         2017-12-05    14:40:19
    B         2017-12-05    19:44:06
    A         2017-12-06    08:26:55
    A         2017-12-06    06:30:38
    A         2017-12-06    11:35:41
    A         2018-01-08    06:40:52
    A         2018-01-08    06:40:52
    A         2018-01-08    06:40:52
    A         2018-01-08    06:40:52
    A         2018-01-08    06:40:52
    A         2018-01-08    06:40:52
    A         2018-01-08    06:40:52
    A         2018-01-08    06:40:52

【问题讨论】:

  • 输出不是查询的输出。请同时提供您的表架构。
  • 您使用的是哪个DBMS product? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tag postgresql, oracle, sql-server, db2, ...
  • 这是一个通过 ODBC 在 ssrs 中连接的 csv 文件。我只是对 csv 文件进行查询。

标签: sql sql-server reporting-services odbc


【解决方案1】:

试试这个:

    Select  RegisterNumber, 
            count(distinct StartDate || '-' || Starttime) AS TOTALDOWNLOAD
    FROM            `SAMPLE.csv`
    WHERE        (MaintenanceFlightTime > 0)
    GROUP BY RegisterNumber 

【讨论】:

  • 我已经更新了我的答案。改为使用串联
  • 谢谢。它给出了这个错误 SELECT 子句中的错误:'|' 附近的表达式。无法解析查询文本。
  • 我又改了。我不知道使用了什么 RDBMS,所以很难知道类型是否匹配
  • csv 是从 postgresql 应用程序生成的。我通过 ODBC 连接到它。
  • 它在查询表达式Count(distinct StartDate,Starttime)中给出了这个错误源odbctext驱动语法错误(缺少运算符)
【解决方案2】:

您应该只在group by 中包含您想要在结果集中的行。因此,如果您想计算每个 RegisterNumber 的天数,您可以使用:

SELECT RegisterNumber, COUNT(DISTINCT StartDate)
FROM `SAMPLE.csv`
WHERE MaintenanceFlightTime > 0
GROUP BY RegisterNumber ;

如果您想计算日期和时间的不同组合,那么某些数据库允许您使用带有多个参数的COUNT(DISTINCT)

SELECT RegisterNumber, COUNT(DISTINCT StartDate, StartTime)
FROM `SAMPLE.csv`
WHERE MaintenanceFlightTime > 0
GROUP BY RegisterNumber ;

在其他情况下,您需要使用字符串连接或日期/时间函数将值组合到单个列中。在极端情况下,您还可以使用子查询:

SELECT RegisterNumber, COUNT(*)
FROM (SELECT DISTINCT RegisterNumber, StartDate, StartTime
      FROM `SAMPLE.csv`
      WHERE MaintenanceFlightTime > 0
     ) s
GROUP BY RegisterNumber ;

【讨论】:

  • 当我使用第二个答案时,它给出了错误:SELECT 子句中的错误:',' 附近的表达式。缺少 FROM 子句。无法解析查询文本。
  • 当我使用最后一个答案时,它给出了输出,但不正确。它是加总而不是每一天
猜你喜欢
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多