【问题标题】:Is there any function in SQLITE,to fetch count with DISTINCT and Date?SQLITE 中是否有任何函数可以使用 DISTINCT 和日期获取计数?
【发布时间】:2019-01-15 19:07:23
【问题描述】:

我正在编写一个选择查询来获取具有 DISTINCT 的行数,并且插入日期的月份与当前月份相同。

我的选择查询:

SELECT count(DISTINCT villageid) AS villages_visited 
FROM indexcard 
WHERE strftime('%Y',visiteddate) = strftime('%Y',date('now')) AND
      strftime('%m',visiteddate) = strftime('%m',date('now'))

只有当一个村庄每个月只访问一次时,上面的选择查询才会给我正确的结果。但是有可能用户每个月最多可以访问同一个村庄两次。

这是我的表格的大致结构:

indexcard_no   villageid     visiteddate
1                   1         15/12/2018

2                   1         15/12/2018

3                   1         15/12/2018

4                   2         16/12/2018

5                   2         16/12/2018

6                   1         30/12/2018

7                   1         30/12/2018

现在我希望得到的结果是=12 月的村庄编号计数必须为 3。但我的选择查询给出计数 =2,因为 iam 使用 DISTINCT。

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    你得到 2 的结果的原因是只有 2 个不同的村庄 id 的 12(根据你展示的数据)

    此外,strftime 将为 DD/MM/YY 格式的日期返回 null,因为这不是可识别的日期格式。日期应采用 YYYY-MM-DD 格式(或其他可识别的格式)。

    SQL As Understood By SQLite - Date And Time Functions - Time Strings

    也许您正在寻找的是:-

    SELECT count(DISTINCT villageid||visiteddate) AS villages_visited 
    FROM indexcard
    

    这会将村庄 ID 与 DISTINCT 子句的日期连接起来,因此每个 visitid 和日期组合将被视为 DISTINCT,因此您的数据中的结果将是 3。


    工作示例:-

    SELECT * FROM indexcard;
    SELECT count(DISTINCT villageid||visiteddate) AS villages_visited 
    FROM indexcard
    

    结果:-

    第一次查询所有行:-

    • 由于问题中提供的日期不正确,请注意额外的列。

    第二次查询:-

    【讨论】:

    • 实际上日期是 YYYY-MM-DD 格式,但是在错误地发布这个问题时,我把它写成了 DD/MM/YY
    • 如果我不使用 distinct,我将得到结果计数 =7,因为表中有 7 个条目。
    • 正确,但这无关紧要,只有两个 id,因此结果为 2。将最后 2 行(例如)更改为 6 3 30/12/20187 3 30/12/2018 结果将是 3,因为现在有 3 个不同/不同的村庄 ID。
    • 这是我在上面的查询中面临的问题。正如我之前提到的,如果一个特定的村庄每个月访问一次,那么上面的查询是完美的。但是如果一个村庄每个月访问两次,结果是错误的。那么我可以用什么替代方法来区分?
    • 我想我明白你想要什么,并且已经编辑了我认为可能是解决方案的答案。
    猜你喜欢
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2021-11-23
    相关资源
    最近更新 更多