gpt4 book ai didi

MySQL:通过三个主键中的两个选择行

转载 作者:行者123 更新时间:2023-11-28 23:21:56 25 4
gpt4 key购买 nike

我正在搜索与 Jonathan 在此示例中搜索的内容完全相反的内容:

How to select multiple rows by multi-column primary key in MySQL?

有 3 列作为主键(第 3 列是日期),我想选择所有列而不是最近的列。如果前两个主要值的组合没有第二个条目,我根本不想选择它。将其视为一种版本控制。表结构包含的列多于这三列,我想选择整行。

看起来像这样:

{ID1 | ID2 | DATE} | more columns ...

伪代码:

SELECT * FROM table WHERE (first and second primary value are the same and exist more than once) AND NOT MAX(date)

:D

我想输出该行所有先前版本的数据,不包括最新版本。

提前感谢您的任何建议!

最佳答案

将问题分解成几个步骤:

伪逻辑:

  • 获取包含我们要排除的记录的数据集
  • 现在从整个集合中排除该数据集

第 1 步:获取仅包含 ID1、ID2 的最大数据的那些记录的数据集

SELECT ID1, ID2, Max(date) date 
FROM Table
GROUP BY ID1, ID2

第 2 步:现在使用该数据集来识别/消除您不想要的记录。不存在可能是最快的。

更快...

SELECT A.* 
FROM TABLE A
WHERE NOT EXISTS
(SELECT 1
FROM (SELECT ID1, ID2, Max(date) date
FROM Table
GROUP BY ID1, ID2) B
WHERE A.ID1 = B.ID1
and A.ID2 = B.ID2
and A.Date = B.Date)

或作为子集的自外连接,速度较慢,但​​如果需要,您可以访问子集的其他详细信息。 (在这个例子中用处不大,但在其他情况下可能会有用)

数据集的左连接显示那些在最大日期匹配的记录,因此所有其他记录将为空,这就是您要查找的数据集...

SELECT A.* 
FROM TABLE A
LEFT JOIN (SELECT ID1, ID2, Max(date) date
FROM Table
GROUP BY ID1, ID2) B
on A.ID1 = B.ID1
and A.ID2 = B.ID2
and A.Date = B.Date
WHERE B.ID1 is null

关于MySQL:通过三个主键中的两个选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41171803/

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