簡體   English   中英

用條件比較mysql中同一個表的行值

[英]Compare rows values of same table in mysql with condition

我有這樣的數據:

header_id | class | start_date | end_date
-------------------------------------------
1         | c1    | 20-08-2019 | 22-08-2019
1         | c1    | 22-08-2019 | 24-08-2019
1         | c2    | 24-08-2019 | 27-08-2019
2         | c3    | 21-08-2019 | 22-08-2019
2         | c2    | 22-08-2019 | 25-08-2019
2         | c3    | 25-08-2019 | 26-08-2019

我想得到以下結果:

header_id | class | start_date | end_date
-------------------------------------------
1         | c1    | 20-08-2019 | 24-08-2019
1         | c2    | 24-08-2019 | 27-08-2019
2         | c3    | 21-08-2019 | 22-08-2019
2         | c2    | 22-08-2019 | 25-08-2019
2         | c3    | 25-08-2019 | 26-08-2019

如果header_id相同,class相同,並且前面數據的結束日期和后面數據的開始日期相同,則取開始日期的最小日期和結束日期的最大日期。 但是,如果之前數據的結束日期與之后數據的開始日期不同,則數據將正常顯示。

有沒有辦法得到那個結果?

此處使用示例分組

SELECT header_id, class, MIN(start_date), MAX(end_date) FROM your-table
GROUP BY header_id, class

也許這可以工作,通過使用聚合函數minmax

SELECT header_id, class, min(start_date) as start_date, max(end_date) as end_date
FROM table_name
Group by header_id, class

這個有點棘手,但您可以LEFT JOIN表本身然后使用LEASTGREATESTMIN MAX函數的組合,如下所示:

SELECT header_id,class,MIN(st_date),MAX(en_date) FROM
   (SELECT a.header_id,a.class,
           LEAST(IFNULL(a.start_date,b.start_date),IFNULL(b.start_date,a.start_date)) AS st_date,
           GREATEST(IFNULL(a.end_date,b.end_date),IFNULL(b.end_date,a.end_date)) AS en_date
    FROM   testing a 
    LEFT JOIN testing b ON a.header_id=b.header_id 
    AND a.class=b.class 
    AND a.start_date=b.end_date) A
GROUP BY header_id,class,st_date
ORDER BY header_id,class,st_date;

在這里參考小提琴: https : //www.db-fiddle.com/f/m5HQ5rrVHu4FQNBEeqc7j9/0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM