gpt4 book ai didi

MySQL:按日期选择前 5 个和后 5 个条目,1 个查询,没有子查询

转载 作者:行者123 更新时间:2023-11-29 07:03:16 26 4
gpt4 key购买 nike

我尝试获取日期低于一个选定日期的“n”个条目和日期“高于”一个选定日期的“n”个条目。

示例数据库:(按 employment_date 排序)

id  | employment_date | name
-------------------------------
23 | 1980-01-11 | peter
21 | 1980-09-02 | sandra
34 | 1982-04-12 | steven
4 | 1982-06-14 | claudia
45 | 1983-10-12 | chuck
56 | 1984-03-16 | bob
1 | 1987-03-23 | kevin

所以我想要的是显示 claudia,然后显示在她之前找到工作的“n”个人和在她之后找到工作的“n”个人。 “n”为 2,对于 claudia,我想要:sandra,steven,claudia,chuck,bob

当然,我可以只做两个查询,但由于我必须停靠到给定的数据提供者结构中,所以我必须在只能使用选择的一个简单查询中完成, Join/Left Join/Inner Join, From, Where, Group By, Order By and Limit.最好没有子查询。

顺便说一下,id 不是连续的。

有什么想法吗?

最佳答案

那丑陋的(好或坏)呢

(
SELECT id,@basedate:=employment_date AS employment_date,name
FROM employees WHERE name='claudia'
)
UNION
(
SELECT * FROM employees
ORDER BY if (employment_date>@basedate,employment_date,'9999-12-31') ASC
LIMIT 2
)
UNION
(
SELECT * FROM employees
ORDER BY if (employment_date<@basedate,employment_date,'0001-01-01') DESC
LIMIT 2
)
ORDER BY employment_date ASC

思路分解:

  • 首先选择基行,记住日期
  • 然后(使用记住的基础日期)选择较晚的日期,通过将它们设置为 MySQL 日期空间的末尾来杀死较早的日期
  • 然后对较早的日期做同样的事情
  • 最后按需要排序

关于MySQL:按日期选择前 5 个和后 5 个条目,1 个查询,没有子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8833226/

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