2017-05-30 64 views
0
SELECT type, text, date FROM tableA GROUP BY CAST(date AS DATE) ORDER BY date DESC, id DESC LIMIT 5 

我希望能夠選擇所有行(最近幾天首先),但將前幾天的數量限制到一定數量(即最後一天5天有行)。SQL如何限制每個組的行數沒有限制的組數

因此,如果我在每天有100個記錄的TableA和每天有100個記錄的TableB和100天有10個記錄的TableB中,結果將是TableA將有500個結果(每個記錄有100個記錄的5天)和TableB將有50個結果(5天,每個10個記錄)。

希望是有道理的。

回答

1

加入返回最近5天的子查詢。

SELECT t1.type, t1.text, t2.date 
FROM tableA AS t1 
JOIN (SELECT DISTINCT DATE(date) AS date 
     FROM tableA 
     ORDER BY date DESC 
     LIMIT 5) AS t2 ON DATE(t1.date) = t2.date 
ORDER BY t2.date DESC, t1.id DESC 
+0

由於日期列是時間戳字段,我遇到了輕微的呃逆。對於這個查詢,我只關心月份日和年分組在一起,而不是小時,分鐘和秒。所以當我使用這段代碼時,它會拉動每一個日期(在限制範圍內),因爲所有的時間戳都是不同的,儘管它們在同一天。如何改變提及日期欄的區域以僅引用日月和年? –

+0

使用'DATE()'函數來比較日期而不是完整的時間戳。 – Barmar