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