【发布时间】:2018-05-18 02:57:57
【问题描述】:
希望每组返回一行,其中一行由多个排序列选择。在greatest-n-per-group 的土地上小心行事以避免重复的问题。
架构:
CREATE TABLE logs (
id INT NOT NULL,
ip_address INT NOT NULL,
status INT NOT NULL,
PRIMARY KEY id
);
数据:
INSERT INTO logs (id, ip_address, status)
VALUES ('1', 19216800, 1),
('2', 19216801, 2),
('3', 19216800, 2),
('4', 19216803, 0),
('5', 19216804, 0),
('6', 19216803, 0),
('7', 19216804, 1);
当前查询:
SELECT *
FROM logs
ORDER BY ip_address, status=1 DESC, id DESC
注意:按status=1 排序有效地将状态列转换为布尔值。 status=1 之后的决胜局是 id。此查询当前首先为每个 ip_address 返回正确的行,然后返回一堆我不想要的 ip_address 的其他行。
当前输出:
1, 19216800, 1
3, 19216800, 2
2, 19216801, 2
6, 19216803, 0
4, 19216803, 0
7, 19216804, 1
5, 19216804, 0
想要的输出:
1, 19216800, 1
2, 19216801, 2
6, 19216803, 0
7, 19216804, 1
今天我的解决方法是使用if ($lastIP == $row['ip_address']) continue; 在 PHP 中进行过滤。但我想将此逻辑移至 MySQL。
【问题讨论】:
-
@Strawberry 好电话,谢谢。我已经添加了查询的当前输出和想要的输出。
标签: greatest-n-per-group mysql greatest-n-per-group limit-per-group