如何获得来自同一列的不同日期的月份数?

时间:2014-09-04 18:39:48

标签: sql

请帮我解决以下问题。

方案: 我必须计算每个仪表的使用情况。在表格中,我有仪表安装日期和仪表拆除日期。可以在不同位置多次安装和移除一个仪表。安装和删除日期都存储在同一列(LOC_DTTM)中。

问题: 如果两个日期都存储在同一列中,我如何获得每个仪表用量的总月数?

我根据日期升序排名第一,然后想做(First removal date - First installation date) + (second Removal date - re-installed date) + ( n - n)

如果我的方法有误,请纠正我,我们将非常感谢您的帮助。

查询:

select a.meter_id, a.loc_dttm,row_number() Over (order by a.loc_dttm asc) as rank
from cisadm.CI_MTR_LOC_HIS a
where 
meter_id in ('0069890525') ;

2 个答案:

答案 0 :(得分:1)

SELECT
meter_id
,sum(Months) as TotalMonths
FROM (
   SELECT
   b.meter_id
   ,(datediff(mm,b.loc_dttm,c.loc_dttm)) as Months
   FROM 
      (select a.meter_id, a.loc_dttm,row_number() Over (order by a.loc_dttm asc) as rank
      from cisadm.CI_MTR_LOC_HIS a
      ) b
   JOIN (select a.meter_id, a.loc_dttm,row_number() Over (order by a.loc_dttm asc) as rank
   from cisadm.CI_MTR_LOC_HIS a
   ) c on b.rank=c.rank-1 and b.rank % 2 <>0
) d
where meter_id in ('0069890525')
group by meter_id

试试这个。

答案 1 :(得分:0)

根据我的理解,您需要在“a.loc_dttm”列中执行日期数据的计算,该列包含两个日期。

我建议:创建两个列的临时表,(date1,date2),其中dateN将从主表中插入临时表中:

date1= Trim(Left(a.loc_dttm, InStr(a.loc_dttm, " ") - 1)),
date2= Trim(Mid(a.loc_dttm, InStr(a.loc_dttm, " ") + 1))

其中“”是用于分割日期的字符。