0
我有42万条记录表,在以下范围:MySQL的 - 条件GROUP BY
| id | date | sid |
+----+------------+-----+
| 01 | 2016-07-09 | 487 |
| 02 | 2016-07-09 | 487 |
| 03 | 2016-07-09 | 487 |
| 04 | 2016-07-09 | 487 |
| 05 | 2016-07-09 | 487 |
| 06 | 2016-07-09 | 753 |
| 07 | 2017-07-01 | 987 |
| 08 | 2017-07-01 | 432 |
| 09 | 2017-07-01 | 432 |
| 10 | 2017-01-13 | 753 |
| 11 | 2017-01-13 | 863 |
| 12 | 2015-01-22 | 255 |
| 13 | 2015-05-22 | 255 |
| 14 | 2015-05-22 | 100 |
| 15 | 2016-07-09 | 487 |
| 16 | 2016-07-09 | 487 |
| 17 | 2016-07-09 | 487 |
| 18 | 2016-07-09 | 487 |
| 19 | 2017-07-01 | 987 |
| 20 | 2017-07-01 | 487 |
| 21 | 2017-01-13 | 753 |
| 22 | 2017-01-13 | 863 |
| 23 | 2015-05-22 | 255 |
| 24 | 2015-05-22 | 100 |
...
我需要查询该表,并获得通过的记录分组:
- 日期,sid是唯一的;
- 日期后,SID,当表在这同一天
计数的目的有其他的SID与此相同的SID值。
换句话说,查询需要返回:
| id | date | sid |
+----+------------+-----+
| 01 | 2016-07-09 | 487 |
| 06 | 2016-07-09 | 753 |
| 07 | 2017-07-01 | 987 |
| 08 | 2017-07-01 | 432 |
| 10 | 2017-01-13 | 753 |
| 11 | 2017-01-13 | 863 |
| 12 | 2015-01-22 | 255 |
| 13 | 2015-05-22 | 255 |
| 14 | 2015-05-22 | 100 |
| 15 | 2016-07-09 | 487 |
| 19 | 2017-07-01 | 987 |
| 20 | 2017-07-01 | 487 |
| 21 | 2017-01-13 | 753 |
| 22 | 2017-01-13 | 863 |
| 23 | 2015-05-22 | 255 |
| 24 | 2015-05-22 | 100 |
...
我的一个toughts的是一样的东西:
SELECT * FROM `table` WHERE date(`date`) >= date('2015-01-01') and date(`date`) <= date('2017-07-20') group by CASE WHEN COUNT(`sid` = `sid`) > 0 THEN `sid` END
#1111 - 无效使用组功能的
任何想法?
** @ query **,我会试试你的建议。 **之间**,我不知道为什么,但是,使用之间的查询的最终计数有差异。 ** @列名**,是的,它被称为日期,并且,是的,它可能不是一个好名字或实践,我真的明白它,但我总是保留使用** **作为列和表简单地区分名称和日期函数的名称 – IonS
@IonS只想提及列名 - 这取决于您。虽然你的方式也很好,但'BETWEEN'应该可以工作。你的日期是否有时间戳? –
是的,我理解并且非常感谢你。 '\'date \''是日期时间列 – IonS