gpt4 book ai didi

MySQL - 根据两列的重复从 Select 中排除行

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

我试图根据返回数据集中多个列的条件匹配来缩小现有复杂查询的结果。我会尽量简化这里的数据。

假设下面的表结构表示我现有的复杂查询已经选择的数据(这里按date排序):

+----+-----------+------+------------+
| id | remote_id | type | date |
+----+-----------+------+------------+
| 1 | 1 | A | 2011-01-01 |
| 3 | 1 | A | 2011-01-07 |
| 5 | 1 | B | 2011-01-07 |
| 4 | 1 | A | 2011-05-01 |
+----+-----------+------+------------+

我需要根据以下标准从该数据集中进行选择:

  • 如果 remote_idtype 的配对对于该集合是唯一的,则始终返回该行
  • 如果 remote_idtype 的配对对于集合不是唯一,请执行以下操作:
    • remote_idtype 的配对不唯一的行集合中,返回 的单个行>date最大的,但仍然小于或等于现在。

所以,如果今天是 2011-01-10,我希望返回的数据集是:

+----+-----------+------+------------+
| id | remote_id | type | date |
+----+-----------+------+------------+
| 3 | 1 | A | 2011-01-07 |
| 5 | 1 | B | 2011-01-07 |
+----+-----------+------+------------+

出于某种原因,我没有运气来解决这个问题。我怀疑答案在于 group by 的良好应用,但我就是无法理解。非常感谢任何帮助!

最佳答案

/* Rows with exactly one date - always return regardless of when date occurs */
SELECT id, remote_id, type, date
FROM YourTable
GROUP BY remote_id, type
HAVING COUNT(*) = 1
UNION
/* Rows with more than one date - Return Max date <= NOW */
SELECT yt.id, yt.remote_id, yt.type, yt.date
FROM YourTable yt
INNER JOIN (SELECT remote_id, type, max(date) as maxdate
FROM YourTable
WHERE date <= DATE(NOW())
GROUP BY remote_id, type
HAVING COUNT(*) > 1) sq
ON yt.remote_id = sq.remote_id
AND yt.type = sq.type
AND yt.date = sq.maxdate

关于MySQL - 根据两列的重复从 Select 中排除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4629097/

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