gpt4 book ai didi

mysql - 从 MySQL 表中选择每个第一个唯一的列元组

转载 作者:行者123 更新时间:2023-11-29 06:25:41 25 4
gpt4 key购买 nike

我在 MySQL (5.7.14) 中有一个具有以下架构的日志表:

CREATE TABLE logs
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
entry_date DATE NOT NULL,
original_date DATE NOT NULL,
ref_no VARCHAR(30) NOT NULL
) Engine=InnoDB;

INSERT INTO logs VALUES
(1,'2020-01-01','2020-01-01','XYZ'),
(2,'2020-01-01','2020-01-01','ABC'),
(3,'2020-01-02','2020-01-01','XYZ'),
(4,'2020-01-02','2020-01-01','ABC'),
(5,'2020-01-03','2020-01-02','XYZ'),
(6,'2020-01-03','2020-01-01','ABC');

我想返回每个唯一 ( original_date, ref_no ) 配对的第一行,其中“第一”定义为“最低 id” '.

例如,如果我有以下数据:

id|entry_date|original_date|ref_no
--+----------+-------------+------
1 |2020-01-01|2020-01-01 |XYZ
2 |2020-01-01|2020-01-01 |ABC
3 |2020-01-02|2020-01-01 |XYZ
4 |2020-01-02|2020-01-01 |ABC
5 |2020-01-03|2020-01-02 |XYZ
6 |2020-01-03|2020-01-01 |ABC

我希望查询返回:

id|entry_date|original_date|ref_no
--+----------+-------------+------
1 |2020-01-01|2020-01-01 |XYZ
2 |2020-01-01|2020-01-01 |ABC
5 |2020-01-03|2020-01-02 |XYZ

换句话说:

  • 返回第 1 行,因为我们还没有看到 2020-01-01,XYZ之前。
  • 返回第 2 行,因为我们还没有看到 2020-01-01,ABC之前。
  • 第 3 行未返回,因为我们已经看到 2020-01-01,XYZ之前(第 1 行)。
  • 第 4 行未返回,因为我们已经看到 2020-01-01,ABC之前(第 2 行)。
  • 返回第 5 行,因为我们还没有看到 2020-01-02,XYZ之前。
  • 第 6 行未返回,因为我们已经看到 2020-01-01,ABC之前(第 2 行)。

有没有办法直接在 SQL 中执行此操作?我考虑过DISTINCT但我认为只返回不同的列,而我想要完整的行。

最佳答案

要避免相关子查询,您可以执行以下操作:

select l.*
from logs l
join (
select original_date, ref_no, min(id) as min_id
from logs
group by original_date, ref_no
) x on l.id = x.min_id

关于mysql - 从 MySQL 表中选择每个第一个唯一的列元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59614274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com