SQLITE中是否有任何函数可以使用DISTINCT和Date来获取计数?

时间:2019-01-15 07:22:21

标签: sqlite

我正在编写一个选择查询以使用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,但是我的选择查询使用DISTINCT给出了count = 2作为iam。

1 个答案:

答案 0 :(得分:0)

得到 2 结果的原因是,只有 2 个不同的村庄ID的 1 2 (根据您显示的数据)

另外,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

这会将村民与DISTINCT子句的日期连接起来,因此每个访问者和日期组合将被视为DISTINCT,因此从您的数据中得出的结果为3。


工作示例:-

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

结果:-

第一个查询所有行:-

enter image description here

  • 请注意由于问题中提供的日期不正确而增加了另一列。

第二个查询:-

enter image description here