【问题标题】:SQL select, only return results where a rate or figure changes in a date and time order sequenceSQL select,仅返回日期和时间顺序中比率或数字发生变化的结果
【发布时间】:2026-02-05 22:00:01
【问题描述】:

我正在尝试返回由时间段分隔的 SQL 数据库中的费率,例如,我只需要返回费率从初始时间段发生变化的结果; BH(Bank Holiday)、WD(Weekday)、WE(Weekend)供参考...

ClientType  Column2     Column 3
Private     BH 06:00    £22.00
Private     BH 09:00    £25.00
Private     BH 17:00    £25.00
Private     WD 06:00    £12.00
Private     WD 09:00    £14.00
Private     WD 17:00    £14.00
Private     WE 06:00    £16.00
Private     WE 09:00    £16.00
Private     WE 17:00    £16.00
Family      BH 06:00    £28.00
Family      BH 09:00    £28.00
Family      BH 17:00    £28.00
Family      WD 06:00    £12.00
Family      WD 09:00    £12.00
Family      WD 17:00    £12.00
Family      WE 06:00    £15.00
Family      WE 09:00    £15.00
Family      WE 17:00    £15.00

所以试图将上述数据返回为,

ClientType  Column2     Column 3
Private     BH 06:00    £22.00
Private     BH 09:00    £25.00
Private     WD 06:00    £12.00
Private     WD 09:00    £14.00
Private     WE 06:00    £16.00
Family      BH 06:00    £28.00
Family      WD 06:00    £12.00
Family      WE 06:00    £15.00

仅在速率随时间段序列发生变化时返回结果。

此外,如果结果仅返回每个时间段之一,例如 Family 类型的客户端,那么它将将该时间段重命名为 BH、WD 和 WE。例如

ClientType  Column2     Column 3
Private     BH 06:00    £22.00
Private     BH 09:00    £25.00
Private     WD 06:00    £12.00
Private     WD 09:00    £14.00
Private     WE          £16.00
Family      BH          £28.00
Family      WD          £12.00
Family      WE          £15.00

谢谢

【问题讨论】:

  • 您的数据似乎假定数据是有序的,但 SQL 表表示 无序 集。数据是如何排序的?同时标记您正在使用的数据库。
  • 它首先按 ClientType 排序,然后是第 2 列,即时间段名称,BH,WD 然后 WE 自然排序,然后在每个 'BH 06:00,BH 09:00 进一步添加时间订购这些。对不起,我应该提到这一点。谢谢

标签: sql filter return


【解决方案1】:

我想你可以用lag()做你想做的事:

select clienttype, column2, column3
from (select t.*,
             lag(column3) over (partition by clienttype, left(column2, 2) order by column2) as prev_column3
      from t
     ) t
where prev_column3 is null or prev_column3 <> column3;

【讨论】:

  • 谢谢你,这让事情顺利进行。通过一些调整,这给出了我需要的结果。谢谢
最近更新 更多