表 testTable
有 4 列
sessionid int
开始日期时间
结束日期时间
SessionIsRunning bool
- 如果最后一个 session 尚未结束,则为真。最多只有一个记录可以在任何时候为真,因为最多只能运行一个 session 。如果没有 session 在运行,则所有记录都将此设为假。
给定两个日期 fromDate
和 toDate
,我如何获得在 fromDate
或之后开始的第一个 session 和最后一个 session 在 toDate
或之前结束。棘手的条件是,如果 session 正在进行并且它是 start date >= fromDate
我们需要这个。我猜测可能无法在一个 sql 语句中同时获取最小和最大 session ID 并保持代码可读性和易于维护。两条单独的sql语句就可以了。一个获得最小值,一个获得最大值。然后我可以在最小值和最大值之间查询行。
最后这句话以不同的方式解释了它。获取开始或正在运行和结束或在从/到日期之间运行的所有 session 谢谢
最佳答案
在考虑了您对 BETWEEN 的编辑和评论之后,这应该会为您提供所需的结果集。它将提取 SessionIsRunning = true 的任何记录以及在日期范围内开始和结束的 session 。
SELECT * FROM testTable tt
WHERE (tt.started >= fromDate AND tt.started < DATEADD(DAY, 1, toDate)
AND tt.ended >= fromDate AND tt.ended < DATEADD(DAY, 1, toDate))
OR SessionIsRunning = true
ORDER BY tt.sessionid
关于sql - 获取从开始到结束日期范围(包括边界)之间的事件行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6540111/