2016-06-10 75 views
0

我有一個大約25個colums的表XX。我只需要其中4個。MySQL:在日期範圍內提取2到10之間的ID

我想提取其中ID發生一次以上行 - 我想我可以用計數做到這一點(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年1月1日,< 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之間的發生標識出一個表嗎?我的團隊中是否有錯誤?

+0

'SELECT * FROM(UR#1 Query)WHERE count> 1 and Count <11 Group by'? – KikiTheOne

+0

你的主要關鍵是什麼?在你的查詢中哪裏是「2和10」標準? – Strawberry

+0

'在2和10之間有計數(*) - 就像你在問題中所說的那樣。 – Barmar

回答

1
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

+0

哇...非常感謝。只是一個理解的問題:爲什麼在日期的哪個地方使用2次? 1. date>'2016-01-01'和2. date>'start-date'和date <'end-date'。 – Peter

+0

我從原始查詢中提取它。如果你不需要它,你可以刪除它。它不影響提取id –