![](/img/trans.png)
[英]Mysql Find occurrence of start and end date range between two date columns
[英]MySQL: Extract IDs with occurrence between 2 and 10 in a date range
我的桌子XX約有25列。 我只需要四個。
我想提取ID多次出現的行-我想我可以用count(x)做到這一點-
桌子看起來像
+------+------++------+------++------+------++------+------++------+------+
ID Date T1 T2 T3 .....
+------+------++------+------++------+------++------+------++------+------+
1 2016-01-01 1212 13412 121212
2 2016-01-01 1214 12541 121241
1 2016-01-01 1212 13412 121212
2 2016-01-01 1214 12541 121241
4 2016-01-01 1214 66666 121241
2 2016-01-01 1214 98889 121241
1 2015-01-01 1213 13412 121212
2 2016-01-01 1214 66666 121241
2 2016-01-02 1214 66666 121241
3 2016-01-01 1214 66666 121241
+------+------++------+------++------+------++------+------++------+------+
結果應如下所示
+------+------++------+------++------+------++------+------++------+------+
ID Date T1 T2 T3 .....
+------+------++------+------++------+------++------+------++------+------+
1 2016-01-01 1212 13412 121212
2 2016-01-01 1214 12541 121241
2 2016-01-01 1214 12541 121241
2 2016-01-01 1214 98889 121241
2 2016-01-01 1214 66666 121241
2 2016-01-02 1214 66666 121241
+------+------++------+------++------+------++------+------++------+------+
如您所見,結果包含不同時間日期之間的計數> 1的ID(> 2016-01-01,<NOW)。
我嘗試使用此查詢進行選擇
SELECT
id, id_date, T1, T2, T3
FROM XY
WHERE id IN (
SELECT id
FROM XY
GROUP BY id
HAVING count(*) > 1
) AND date > '2016-01-01'
GROUP BY id, id_date, T1, T2, T3
結果與我執行的其他方法不同。 我首先使用以下查詢創建了一個臨時表
SELECT id, id_date, T1, T2, T3 FROM XY
WHERE id_date > '2016-01-01'
GROUP BY id, id_date, T1, T2, T3
然后,我從臨時表中取出一個ID,然后使用另一種方法檢查即將到來的結果。 他們是不同的。
長話短說:
如何從特定日期范圍內的表中提取出現次數介於2到10之間的ID? 我的分組依據是否存在錯誤?
SELECT
id, id_date, T1, T2, T3
FROM XY
WHERE id IN (
SELECT id
FROM XY
where date > 'start-date' and date < 'end-date'
GROUP BY id
HAVING count(*) > 1 and count(*) <11
) AND date > '2016-01-01'
GROUP BY id, id_date, T1, T2, T3
在having
子句中添加另一個條件來滿足您的要求。 添加where
子句以查詢提取ID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.