我尝试使用ID和日期过滤表格。我的问题是;一个月内出现了多少独特的ID?我从数据库中拿了一个小片段,可以在这篇文章的底部查看。
仅每天计算一次唯一ID。即使ID每天显示2次也是如此,我们仅将Id计为当天的一次
仅计算每月显示至少 2次的ID。意思是我们排除
感觉执行此操作的方法很短,我想学习。到目前为止,我已将日期拆分为更短的示例" 30-01-2018",我可以在这里过滤掉每个日期的乘数。然后我完成了对不同标签的计数。这似乎有效,但涉及4-5个单独的临时表。是否有更好的方法可以一次性对其进行排序?
日期日期时间
Id varchar
+-------------------------+-----+
| Dates | Id |
+-------------------------+-----+
| 2018-01-30 08:37:51.450 | 158 |
| 2018-01-31 08:43:04.317 | 158 |
| 2018-01-31 08:32:43.977 | 143 |
| 2018-01-31 12:51:12.720 | 143 |
| 2018-01-30 08:35:51.777 | 89 |
| 2018-01-30 12:47:52.817 | 189 |
| 2018-01-31 08:46:58.913 | 89 |
| 2018-01-31 08:29:23.077 | 109 |
| 2018-01-30 07:10:00.267 | 31 |
| 2018-01-31 06:01:54.813 | 31 |
| 2018-01-31 12:36:04.583 | 31 |
| 2018-01-30 08:07:27.320 | 187 |
| 2018-01-30 08:08:11.917 | 226 |
| 2018-01-30 12:20:00.240 | 226 |
| 2018-01-31 08:17:59.257 | 226 |
| 2018-01-30 09:20:23.577 | 167 |
| 2018-01-31 12:40:30.977 | 167 |
| 2018-01-31 14:02:18.563 | 167 |
+-------------------------+-----+
谢谢!
答案 0 :(得分:1)
按年份和月份对数据进行分组。然后COUNT(*)
会为您提供每月的商品数量,例如在2018 - 01年出现31次,在2018 - 01年出现143次,在2018 - 01年出现了3次,依此类推。
但是您希望在同一天合并项目,COUNT(DISTINCT DAY(Dates))
会为您提供所需的数字,例如在2018 - 01年出现了143次(两次都发生在31日)。
SELECT Id, YEAR(Dates) YY, MONTH(Dates) MM, COUNT(DISTINCT DAY(Dates)) AS C
FROM testdata
GROUP BY Id, YEAR(Dates), MONTH(Dates)
HAVING COUNT(DISTINCT DAY(Dates)) >= 2
输出:
| Id | YY | MM | C |
|-----|------|----|---|
| 31 | 2018 | 1 | 2 |
| 89 | 2018 | 1 | 2 |
| 158 | 2018 | 1 | 2 |
| 167 | 2018 | 1 | 2 |
| 226 | 2018 | 1 | 2 |