Sql 如何获取来自同一列的不同日期的月数?

Sql 如何获取来自同一列的不同日期的月数?,sql,Sql,请帮助我解决以下问题 情景: 我必须计算每台电表的使用量。在表中,我有仪表安装日期和仪表拆卸日期。一个仪表可以在不同的位置多次安装和拆卸。安装和拆卸日期均存储在同一列LOC_DTTM中 问题: 如果两个日期都存储在同一列中,如何获取每个仪表使用的月总数 我确实根据日期升序排名第一,然后想做第一次删除日期-第一次安装日期+第二次删除日期-重新安装日期+n-n 请纠正我,如果我的方法是错误的,你的帮助将不胜感激 查询: select a.meter_id, a.loc_dttm,row_number

请帮助我解决以下问题

情景: 我必须计算每台电表的使用量。在表中,我有仪表安装日期和仪表拆卸日期。一个仪表可以在不同的位置多次安装和拆卸。安装和拆卸日期均存储在同一列LOC_DTTM中

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

我确实根据日期升序排名第一,然后想做第一次删除日期-第一次安装日期+第二次删除日期-重新安装日期+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') ;

据我所知,您需要对包含两个日期的.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))
其中是用于拆分日期的字符

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

试试这个

快速澄清,看看我是否收到了你的问题…但是每个安装/拆卸日期都是不同的行,所以每个仪表id的CI_MTR_LOC_HIS中有很多行?听起来正确吗?CI_MTR_LOC_HIS中是否有任何东西表明它是安装还是移除?或者只是第1行是安装,第2行是删除,第3行是安装,第4行是删除,等等,只是交替?一些示例数据不会有什么影响。我想你可能误解了日期的存储方式;该列不包含两个值,但一列存储两种不同类型的日期,一行用于安装,一行用于删除。如果使用WITH子句,则无需执行相同的操作,请选择两次。您还可以使用LAG并完全取消连接