日期时间处理与销售数据统计分析
1. 日期时间处理
在处理日期和时间数据时,会遇到诸多棘手问题,如不同语言约定、舍入问题、非 SARGable 过滤器以及实现的局限性等。不过,有一些方法能够正确且高效地处理这些任务,尽管部分解决方案较为复杂,需要一定的创造力。
1.1 示例代码
以下是一段处理日期和时间数据的代码示例:
C3 AS
(
SELECT *,
FLOOR((ROW_NUMBER() OVER(ORDER BY ts) + 1) / 2) AS p
FROM C2
CROSS APPLY ( VALUES(s - (se - s) - 1, (se - e) - e) ) AS A(cs, ce)
WHERE cs = 0 OR ce = 0
)
SELECT MIN(ts) AS starttime, MAX(ts) AS endtime
FROM C3
GROUP BY p;
GO
之后,可以使用以下查询将表值函数(TVF)应用于 Accounts 表(为演示目的,使用 TF 8649 强制并行):
SELECT A.actid, P.starttime, P.endtime
FROM dbo.Accounts AS A
CROSS APPLY dbo.PackedIntervals(A.actid) AS P
OPTION(QUERYTRACEON 8649);
该查询在系统上仅需 10 秒即可完成。
超级会员免费看
订阅专栏 解锁全文
8673

被折叠的 条评论
为什么被折叠?



