繁体   English   中英

SQL 组中两行之间的差异

[英]SQL Difference between two row in group by

我有一个商店id、处理批次id和开始时间的表records如下:

|store_id | batch_id | process_start_time |
| A       | 1        | 10                 |
| B       | 1        | 40                 |
| C       | 1        | 30                 |
| A       | 2        | 400                |
| B       | 2        | 800                |
| C       | 2        | 600                |
| A       | 3        | 10                 |
| B       | 3        | 80                 |
| C       | 3        | 90                 |

这里,需要按batch_idtime_taken分组的行是store Astore Cprocess_start_time差异

所以,预期的结果是:

batch_id | time_taken
1        | 20
2        | 200
3        | 80

我试图做类似的事情:

select batch_id, ((select process_start_time from records where store_id = 'C') - (select process_start_time from records where store_id = 'A')) as time_taken 
from records group by batch_id;

但无法弄清楚该特定组中的 select 特定行。

感谢您的关注!

更新:对于商店 C,process_start_time 列不一定是最大值

您似乎需要条件聚合和算术:

select batch_id,
       (max(case when store_id = 'C' then process_start_time end) -
        min(case when store_id = 'A' then process_start_time end)
       ) as diff
from records
group by batch_id;

您可以尝试自我加入。

SELECT r1.batch_id,
       r1.process_start_time - r2.process_start_time time_taken
       FROM records r1
            INNER JOIN records r2
                       ON r1.batch_id = r2.batch_id
       WHERE r1.store_id = 'C'
             AND r2.store_id = 'A';

这是另一个答案。 这是使用记录表的两个实例,我们将它们与 where 子句链接起来,如下所示:

select a.batch_id,
       c.process_start_time - a.process_start_time as time_taken
from   records a,
       records c
where  a.store_id = 'A'
and    c.store_id = 'C'
and    exists (
select 1
from   records x
where  x.batch_id = a.batch_id
and    x.batch_id = c.batch_id
);
SELECT DISTINCT 
    store_a.batch_id,
    store_c.process_start_time - store_a.process_start_time AS 'time_taken'
    FROM records store_a  
    INNER JOIN records store_c
    ON store_a.batch_id = store_c.batch_id 
       AND store_c.store_id = 'C' 
       AND  store_a.store_id = 'A'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM