2013-08-22 22 views
1

我有這個表是這樣的:如何在mySQL中按日期分組的方式獲取ID?

AdID | Hits | CreatedOn 
1, 20, 2013-08-28 18:18:42 
2, 12, 2013-08-28 13:34:42 
3, 12, 2013-08-27 11:34:42 
4, 14, 2013-08-27 02:34:42 
5, 12, 2013-08-26 11:34:42 
6, 12, 2013-08-26 02:34:42 

我想結果會是這樣:

1, 20, 2013-08-28 
4, 14, 2013-08-27 
5, 12, 2013-08-26 

基本上,它會選擇每個日期的最HIST,如果它的HITS一樣它將選擇AdID的頂部

我如何在mySQL中做到這一點?

+0

你有沒有嘗試過什麼嗎? –

+0

您需要按點擊組,然後按最新日期按日期排序 – MaveRick

+0

另請參閱:[如何從'datetime'列中選擇'日期'](http://stackoverflow.com/q/1754411/1935077) –

回答

3

由於您需要從日期中提取時間,但會提供您所需的結果,因此執行速度稍慢。

SELECT a.AdID, a.Hits, DATE(a.CreatedON) CreatedON 
FROM  tableName a 
     INNER JOIN 
     (
      SELECT DATE(CreatedON) CreatedON, 
        MAX(Hits) Hits 
      FROM tableName 
      GROUP BY DATE(CreatedON) 
     ) b ON a.Hits = b.Hits AND 
       DATE(a.CreatedON) = b.CreatedON 
+0

如果它們具有相同的命中數量,這將爲日期提供兩行。 – jbaylina

+0

@jbaylina正好。他們擁有相同的人數和一天中最受歡迎的人數。 –

+0

問題在於只採用AdID較低的問題。 – jbaylina

0

如果我理解正確的,你想GROUP BY命中和,然後選擇最低或最高的ID,所以你需要兩件事情:一組和排序:

SELECT AdID FROM table GROUP BY Hits ORDER BY AdID ASC LIMIT 1 

這會給你帶來最高點擊組的最低AdID。如果你想要的是最高的AdID,你需要切換ASCDESC ofcource

+0

但這隻會返回1行! – MaveRick

+0

需要按日期進行分組NOT命中......然後選擇該命中的MAX和MAX命中的ID。 – dcpartners

+0

ofcourse它將只返回一行,因爲你只需要1個最大值... – NDM

1

查詢:

SQLFIDDLEExample

SELECT a.AdID, a.Hits, DATE(a.CreatedOn) CreatedON 
FROM tableName a 
WHERE a.AdID = (SELECT b.adID 
       FROM tableName b 
       WHERE DATE(b.CreatedOn) = DATE(a.CreatedOn) 
       ORDER BY b.Hits DESC, b.adID ASC 
       LIMIT 1) 

結果:

| ADID | HITS |      CREATEDON | 
----------------------------------------------- 
| 1 | 20 | August, 28 2013 00:00:00+0000 | 
| 4 | 14 | August, 27 2013 00:00:00+0000 | 
| 5 | 12 | August, 26 2013 00:00:00+0000 |