我有2个表,这些表必须联接才能获取所需的数据。
Percision: 512
Quotient: 10001000100010001000100010001000.1000100010001000155533
是文章,Table1
是针对渠道/类别的。
为简单起见,两个表都只有两个字段。
基本上,我需要为每个组(Table2
)选择N个唯一的ID
。组之间的值不应重复。
我可以使用term_id
和RANK
达到预期的结果,但是它仅适用于MySQL 8.x,而我需要在5.7中运行。
摆弄表格结构,一些示例数据和当前查询为here
该方法如何适应5.7 MySQL?
PARTITION
答案 0 :(得分:0)
仅适用于8.0之前的版本...
SET @prev = null;
SET @i = 0;
SELECT id
, term_id
, date
, i
FROM
(SELECT x.id
, y.term_id
, x.date
, CASE WHEN @prev = term_id THEN @i:=@i+1 ELSE @i:=1 END i
, @prev:=term_id
FROM (SELECT DISTINCT id, date FROM table1) x
JOIN table2 y
ON y.object_id = x.ID
WHERE y.term_id IN (1, 564, 91170, 568)
ORDER
BY y.term_id
, x.date DESC
) n
WHERE i<=3
ORDER
BY term_id,i;
+--------+---------+---------------------+------+
| id | term_id | date | i |
+--------+---------+---------------------+------+
| 195512 | 1 | 2019-02-27 12:28:18 | 1 |
| 195260 | 1 | 2019-01-02 15:26:45 | 2 |
| 195245 | 1 | 2019-01-02 14:22:57 | 3 |
| 195473 | 564 | 2019-01-03 10:52:01 | 1 |
| 192982 | 564 | 2018-12-21 19:55:42 | 2 |
| 192695 | 564 | 2018-12-20 15:22:41 | 3 |
| 195295 | 568 | 2019-01-02 15:23:54 | 1 |
| 192876 | 568 | 2018-12-21 13:25:22 | 2 |
| 192537 | 568 | 2018-12-20 11:59:50 | 3 |
| 195260 | 91170 | 2019-01-02 15:26:45 | 1 |
| 192676 | 91170 | 2018-12-20 15:30:08 | 2 |
| 192409 | 91170 | 2018-12-19 15:44:59 | 3 |
+--------+---------+---------------------+------+
请注意,样本数据集具有重复的数据。这是结构良好的RDBMS中的oxymoronix。因此,您可能要修复该问题。