2016-06-10 76 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 –