请帮我解决以下问题。
方案: 我必须计算每个仪表的使用情况。在表格中,我有仪表安装日期和仪表拆除日期。可以在不同位置多次安装和移除一个仪表。安装和删除日期都存储在同一列(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') ;
答案 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))
其中“”是用于分割日期的字符。