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