sql - SQL中日期的滞后函数
问题描述
我正在使用 LAG SQL 函数来获取记录中 2 个连续日期的差异。问题是,它返回的结果是 DATE -TIME 格式,而我希望它以天或小时为单位。附件是输出结果和预期结果。
代码:
select
*,
(action_date - lag(action_date) over (partition by voucher_no order by action_date)) as diff
from cte3
解决方案
我建议使用time
最后一列——尽管它也给了你几秒钟的时间:
SELECT DATEDIFF(day, LAG(Date) OVER (ORDER BY Date), Date ) AS diff_day,
CONVERT(TIME, Date - LAG(Date) OVER (ORDER BY Date)) as time
FROM t;
如果您愿意,可以很简单地将其转换为 HH:MM 格式:
SELECT DATEDIFF(day, LAG(Date) OVER (ORDER BY Date), Date ) AS diff_day,
CONVERT(VARCHAR(5), CONVERT(TIME, Date - LAG(Date) OVER (ORDER BY Date))) as time_hhmm
FROM t;
这是一个 db<>fiddle。
我更喜欢这种方法,因为它更容易格式化时间。特别是,小提琴包括一个时间为 00:01 的示例,其格式为00:01
而不是0:1
.
推荐阅读
- java - JPA 控制器类与 EJB
- ios - 如何使用带有私有数据库的 CoreData + CloudKit 更新手表并发症?
- excel - 在excel中突出显示具有条件的块
- c# - Adobe PDF 不再显示在 IE WebBrowser ActiveX 控件中
- php - 如何更改单个产品页面 URL?
- pandas - 检查多个列的多个值并返回一个数据框
- r-exams - nops_eval 'register' 中的错误不包含所有列registration/name/id
- android - 对话框关闭后打开软键盘
- c - 当我使用 VScode 在 C 中编码时看不到问题
- reactjs - 更改电子邮件的主题 - 表单模块