SQL |按顺序从多行中获取最小和最大日期
SQL | Min and Max dates from multiple rows by sequence
我正在尝试从我的 table 中获得以下结果。
当序列相同时,我想取 start_dt
的最小值和 end_dt
的最大值。但我在序列中也有 null
,我不想将它们分组。
我试过 dense rank
但没用。也许我应该在新序列中使用类似中介 table 的东西 - 但我不知道如何实现。
我怎样才能达到这个结果?
我的table:
预期结果:
我看到您在所附的预期结果图片中也按空值分组。如果这是您所需要的,那么您可以简单地使用 'group by' 语句。
select Sequence, min(start_dt) as start_dt, max(end_dt) as end_dt from your_table
group by Sequence
但是,如果您不想按空值分组,您可以使用带有上述 'group by' 语句的 'HAVING' 子句消除它,甚至可以使用 'WHERE' 子句中的中间 table 然后在结果 table.
上使用 'group by' 语句
select Sequence, min(start_dt) as start_dt, max(end_dt) as end_dt from
( select * from your_table where Sequence is not null) as s
group by Sequence
您可以使用 union all
将分组结果与具有 null
的单个结果合并为 sequence
:
select id, min(start_dt), max(end_dt), sequence
from mytable
group by id, sequence
having sequence is not null
union all
select id, start_dt, end_dt, sequence
from mytable
where sequence is null;
如果你的数据库有办法生成一个唯一的数字或者每一行都有一个唯一的标识符(首选!),那么你可以在 group_by
子句中使用它作为额外的表达式,在 coalesce
表达式。
例如,在MySQL中,您可以:
select id, min(start_dt), max(end_dt), sequence
from mytable
group by id, sequence, coalesce(sequence, UUID());
在 SQL 服务器上,您可以:
select id, min(start_dt), max(end_dt), sequence
from mytable
group by id, sequence, coalesce(sequence, NEWID());
我正在尝试从我的 table 中获得以下结果。
当序列相同时,我想取 start_dt
的最小值和 end_dt
的最大值。但我在序列中也有 null
,我不想将它们分组。
我试过 dense rank
但没用。也许我应该在新序列中使用类似中介 table 的东西 - 但我不知道如何实现。
我怎样才能达到这个结果?
我的table:
预期结果:
我看到您在所附的预期结果图片中也按空值分组。如果这是您所需要的,那么您可以简单地使用 'group by' 语句。
select Sequence, min(start_dt) as start_dt, max(end_dt) as end_dt from your_table
group by Sequence
但是,如果您不想按空值分组,您可以使用带有上述 'group by' 语句的 'HAVING' 子句消除它,甚至可以使用 'WHERE' 子句中的中间 table 然后在结果 table.
上使用 'group by' 语句select Sequence, min(start_dt) as start_dt, max(end_dt) as end_dt from
( select * from your_table where Sequence is not null) as s
group by Sequence
您可以使用 union all
将分组结果与具有 null
的单个结果合并为 sequence
:
select id, min(start_dt), max(end_dt), sequence
from mytable
group by id, sequence
having sequence is not null
union all
select id, start_dt, end_dt, sequence
from mytable
where sequence is null;
如果你的数据库有办法生成一个唯一的数字或者每一行都有一个唯一的标识符(首选!),那么你可以在 group_by
子句中使用它作为额外的表达式,在 coalesce
表达式。
例如,在MySQL中,您可以:
select id, min(start_dt), max(end_dt), sequence
from mytable
group by id, sequence, coalesce(sequence, UUID());
在 SQL 服务器上,您可以:
select id, min(start_dt), max(end_dt), sequence
from mytable
group by id, sequence, coalesce(sequence, NEWID());