我有大量数据,我想计算某列的出现次数。令人困惑的是,它不只是找到相同的列值,而只是它的一部分。
我的表格包含 TimeStamp 格式为( YYYY-MM-DD HH:MM:SS ),我想将此SQL命令仅应用于 YYYY-MM-DD 部分并基于此计算每个的发生次数。例如,如果我的数据如下:
ID|TimeStamp
--+--------------------
00|2017-08-31 09:00:00
01|2017-08-31 11:00:00
02|2017-08-31 16:30:00
03|2017-08-31 22:00:00
04|2017-09-01 09:00:00
05|2017-09-01 23:40:00
06|2017-09-02 10:30:00
07|2017-09-02 13:00:00
08|2017-09-02 23:00:00
然后我希望我的SQL命令输出类似
的内容TimeStamp | Occurrences
-----------+------------
2017-08-31 | 4
2017-09-01 | 2
2017-09-02 | 3
我一直试图从目前为止到达那里,但我没有运气。
我有这个SQL:
SELECT
TimeStamp, COUNT(*)
FROM
myTableName
GROUP BY
TimeStamp
ORDER BY
COUNT(*) DESC -- to sort the occurrence count
但这仅计算完全相同的时间戳,因此这不会输出我想要输出的内容。我也在想TimeStamp有DateTime类型,所以我必须先将它转换为varchar或其他东西,然后获取它的子串。
我尝试将TimeStamp数据类型转换为Varchar,然后获取字符串的前10个字母,所以
SELECT
COUNT(*) TimeStamp
FROM
myTableName
GROUP BY
(SELECT LEFT(CONVERT(Varchar, TimeStamp, 120), 10))
ORDER BY COUNT(*) DESC
但这会导致错误:
错误:无法在GROUP BY子句列表中用于组的表达式中使用聚合或子查询
有人可以帮我这个吗?谢谢。
答案 0 :(得分:0)
SELECT CAST(TimeStamp as date), COUNT(*)
FROM myTableName
GROUP BY CAST(TimeStamp as date)
ORDER BY 2 DESC