sql - 获取从开始到结束日期范围(包括边界)之间的事件行

标签 sql database sql-server-2005 tsql stored-procedures

testTable 有 4 列

  • sessionid int
  • 开始日期时间
  • 结束日期时间
  • SessionIsRunning bool - 如果最后一个 session 尚未结束,则为真。最多只有一个记录可以在任何时候为真,因为最多只能运行一个 session 。如果没有 session 在运行,则所有记录都将此设为假。

给定两个日期 fromDatetoDate,我如何获得在 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/

相关文章:

php - PostgreSQL:在特定数据库中创建模式 [NOT psql]

c++ - C/C++ 中 char *(字符指针)的大小会有所不同吗? - 用于数据库列固定大小

sql - 如何在 WHERE 子句中引用别名?

sql - 合并两个表的内容而不重复内容

sql - PL/SQL 和 SQL 脚本在一个带有 liquibase 的 sqlFile 中?

java - 大学 DBMS 项目的安装

c# - 存储过程的 LINQ to SQL 自动生成类型

sql - 仅使用 SQL 将图片插入 SQL Server 2005 图像字段

sql - PostgreSQL 可以返回一个值列表,其中后面的值会覆盖前面的值吗?

mysql - 将相似的数据对象合并到单个表中是否有效?