gpt4 book ai didi

mysql - 获取查询以列出同一 Id 的特定列的开始值和结束值之间的记录

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

有一个包含列的表格:

USE 'table';  
insert into person values
('11','xxx','1976-05-10','p1'),
('11','xxx ','1976-06-11','p1'),
('11','xxx ','1976-07-21','p2'),
('11','xxx ','1976-08-31','p2'),

任何人都可以建议我查询以获取该人根据他按时间顺序更改的地点的开始和结束日期。

我写的查询

SELECT PId,Name,min(Start_Date) as sdt, max(Start_Date) as edt, place 
from **
group by Place;

只给出我答案的前两行。谁能建议查询??

最佳答案

这并不漂亮,性能可能很糟糕,但至少它是 works :

select min(sdt), edt, place
from (
select A.Start_Date sdt, max(B.Start_Date) edt, A.place
from person A
inner join person B on A.place = B.place
and A.Start_Date <= B.Start_Date
left join person C on A.place != C.place
and A.Start_Date < C.Start_Date
and C.Start_Date < B.Start_Date
where C.place is null
group by A.Start_Date, A.place
) X
group by edt, place

想法是AB 代表所有 行。 C 将是这两行之间具有不同 place 的任何行。所以经过C.place is null限制后,我们知道AB属于同一个范围,即一组行为一个按时间顺序放置在它们之间没有其他位置。从所有这些对中,我们想要确定那些具有最大范围的,那些包含所有其他对的。为此,我们使用两个嵌套的 group by 查询。内部的将为每个可能的开始日期选择最大结束日期,而外部的将为每个可能的结束日期选择最小的开始日期。结果是描述同一地点的按时间顺序排列的后续行的最大范围。

关于mysql - 获取查询以列出同一 Id 的特定列的开始值和结束值之间的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12275048/

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