gpt4 book ai didi

MySQL 选择 MySQL 结果子集中最接近的匹配

转载 作者:行者123 更新时间:2023-11-29 09:30:51 24 4
gpt4 key购买 nike

假设我有以下 MySQL (InnoDB) 表:

+-------------------------------------------------------------------+
| table "taskList" |
+----+------------------+----------+---------------------+----------+
| ID | TaskName | Category | Date_time | Priority |
+----+------------------+----------+---------------------+----------+
| 1 | cleanup | system | 2019-06-02 03:30:00 | 5 |
+----+------------------+----------+---------------------+----------+
| 2 | create_user | system | 2019-03-23 11:56:10 | 5 |
+----+------------------+----------+---------------------+----------+
| 3 | send_invoice | system | 2019-03-23 11:56:17 | 6 |
+----+------------------+----------+---------------------+----------+
| 4 | perform_selftest | system | 2019-06-25 06:54:11 | 1 |
+----+------------------+----------+---------------------+----------+
| 5 | add_destination | map | 2019-02-15 16:21:04 | 2 |
+----+------------------+----------+---------------------+----------+
| 6 | verify_VIN | chassis | 2019-01-04 09:35:49 | 5 |
+----+------------------+----------+---------------------+----------+


我想编写一个查询,选择与以下所有条件匹配的任何记录(请注意,引号之间的值是示例,将在现实世界中参数化):

  • 类别“系统”
  • 日期时间介于“2019-01-01”和“2019-07-01”之间
  • 在此子集中具有最高优先级,最接近“2”(允许使用 2 本身,但不允许使用更高的优先级,例如 1)

在本例中,有 4 条记录符合前两个条件。但在这 4 个中,只有 2 个符合优先级条件。因此,这里应该返回记录 #1 和 #2(并且仅返回这些记录)。


通过搜索该网站,我编写了以下查询,该查询似乎有效,但它非常丑陋,我感觉它在性能方面可以更有效:

SELECT * FROM taskList
WHERE category='system'
AND (Date_time BETWEEN '2019-01-01' AND '2019-07-01')
AND Priority=(
SELECT MIN(Priority) FROM taskList
WHERE category='system'
AND (Date_time BETWEEN '2019-01-01' AND '2019-07-01')
AND Priority >= 2
)
ORDER BY Date_time DESC

有谁知道更好的方法吗?

最佳答案

未经测试,因为未提供 DDL:

SELECT x.columns
, x.you
, x.actually
, x.want
FROM taskList x
LEFT
JOIN tasklist y
ON y.category = x.category
AND y.date_time = x.date_time
AND y.priority < 2
WHERE x.category='system'
AND x.date_time BETWEEN '2019-01-01' AND '2019-07-01'
AND y.id IS NULL;

关于MySQL 选择 MySQL 结果子集中最接近的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58779458/

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