如何选择时间戳之间状态的记录?T-SQL

Python_Learner_DK

我有一个T-SQL报价表,需要能够统计过去几个月中处于打开状态的报价。

我需要处理的日期是' Add_Date'时间戳和' Update_Date'时间戳。一旦将引号放入Closed_Status1”中,就无法再更新。因此,“ Update_Date”实际上成为Closed_Status时间戳。

我被困住了,因为我不知道如何选择在特定月份内打开的所有开放报价。

这是一些示例记录:

Quote_No   Add_Date   Update_Date  Open_Status  Closed_Status
001        01-01-2016  NULL         1            0
002        01-01-2016  3-1-2016     0            1
003        01-01-2016  4-1-2016     0            1

理想的结果将是:

Year  Month  Open_Quote_Count
2016  01     3
2016  02     3
2016  03     2
2016  04     1

我在这上面碰到了心理障碍,我尝试进行一些case when过滤,但是我似乎无法弄清楚这个难题。理想情况下,我不会对日期进行硬编码,因为它跨越了数年之久,而且我不想在编写后就维护它。

预先感谢您的帮助。

戈登·利诺夫(Gordon Linoff)

您正在按月执行此操作。因此,想到了三个选择:

  • 使用的所有月份的列表left join
  • 递归CTE。
  • 一个数字表。

让我展示最后一个:

with n as (
      select row_number() over (order by (select null)) - 1 as n
      from master..spt_values
     )
select format(dateadd(month, n.n, q.add_date), 'yyyy-MM') as yyyymm,
       count(*) as Open_Quote_Count
from quotes q join
     n
     on (closed_status = 1 and dateadd(month, n.n, q.add_date) <= q.update_date) or
        (closed_status = 0 and dateadd(month, n.n, q.add_date) <= getdate()) 
group by format(dateadd(month, n.n, q.add_date), 'yyyy-MM')
order by yyyymm;

这确实假设每个月至少有一个未完成的记录。为此目的,这似乎是合理的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL选择最高时间戳为最低的记录

如何根据SQL Server中特定时间之间的时间选择记录

如何使用sql从oracle中的时间戳生成登录记录?

Impala SQL-如何计算时间戳之间的月数?

如何从每个货币对 SQL 中选择最大时间戳?

SQL如何通过值选择最近的时间戳?

如何在 SQL Server 中的时间戳和时间戳之间

2条记录时间戳sql的区别

在 SQL 中选择时间戳范围

SQL记录具有最新时间戳,但具有枚举用户的联接,但不是特定状态

SQL基于时间戳和状态的总时间

如何使用联接在SQL Server中基于时间戳获取最新记录

如何使用sql中的时间戳列从表中获取过去30天的记录

2个时间戳之间的时间的SQL行

如何计算 BigQuery 中 2 个时间戳变量之间的差异(以分钟为单位)?(标准 SQL)

如何使用SQL中的Unix时间戳从本周中选择数据?

如何使用T-SQL“选择”随机记录

如何使sql时间戳作为列名?

SQL:基于时间戳和代码的查询状态

SQL:嵌套查询中的Geeting Order状态时间戳

SQL查询可基于相邻记录插入时间戳

如何选择sql语句未选择的记录?

Oracle SQL:不规则时间戳之间的计数

SQL时间戳-> 1970

未来的SQL时间戳?

SQL组两列,然后选择最近的日期/时间戳

如何在oracle中两个时间戳之间选择记录

如何创建查看两条连续记录之间的时间间隔的 SQL 查询

如何从SQL中的日期/时间字段中删除时间戳?