我正在编写一个选择查询以使用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。
答案 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