2017-05-30 76 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