You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

245 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*交易记录挂车牌*/
/*把POSID和车牌一一对应的先匹配 没配上的交易条数65411*/
select * into [temp].[dbo].[jy623_plate1] from
(select a.*,b.[车牌] as platenum from
[klb].[dbo].[qsjy_0623] a
left join
(select distinct [POS机编号],[车牌] from [temp].[dbo].[posplate623] where [POS机编号] in (
SELECT distinct [POS机编号] FROM [temp].[dbo].[posplate623] group by [POS机编号] having count(distinct [车牌]) = 1)) b
on a.[tjrlposid] = b.[POS机编号]) e
/*监控数据中司售卡和车牌一一对应的 匹配车牌 没配上的交易条数7430*/
select * into temp1 from (SELECT * FROM [temp].[dbo].[jy623_plate1] where [platenum] is null ) a ---65411
select * into temp2 from
(SELECT a.* , b.[line_name_gj],b.[line_code_jtk]
FROM [klb].[dbo].[monitor$] a left join [temp].[dbo].[linematch] b on a.线 = b.[line_name_gj])b --8210 添加了jtk线路代码的监控数据temp2
select * into [temp].[dbo].[jy623_plate2] from (
select a.tjrlcardno,a.tjrlposid,a.tjrlrdate,a.tjrlrtime,a.[tjrlsdate] ,a.[tjrlcdkind] ,a.[tjrlamt],a.[tjrlstatid] ,a.[tjrlunitid],a.[tjrlorgamt],
a.[tjrlposcardid],b.[牌照号] as platenum from temp1 a
left join
(
select distinct [司售卡编码],[线路],line_code_jtk,[牌照号] from temp2 where [司售卡编码] in
(select [司售卡编码] from temp2 where [司售卡编码] != '' group by [司售卡编码],[线路] having count(distinct [牌照号]) = 1)) b
on a.tjrlposcardid = b.) a ----考虑有的司机会乱刷线路卡,只用司售卡编码做关联
select * into temp3 from (SELECT * FROM [temp].[dbo].[jy623_plate2] where [platenum] is null ) a ---7530
/*根据交易时间从监控数据中捞车牌补全 又补了1539条*/
UPDATE temp2 SET [实际出场时间] = [计划出场时间] where [实际出场时间] = ''
UPDATE temp2 SET [实际出场时间] = substring([实际出场时间],12,2)+substring([实际出场时间],15,2)+substring([实际出场时间],18,2)
select * into temp5
from (
select *, cast(e.tjrlrtime as numeric) - cast(e. as numeric) as delta from (
select a.tjrlcardno,a.tjrlposid,a.tjrlrdate,a.tjrlrtime,a.[tjrlsdate] ,a.[tjrlcdkind] ,a.[tjrlamt],a.[tjrlstatid] ,a.[tjrlunitid],a.[tjrlorgamt],
a.[tjrlposcardid],b.,b. from
(select * from temp3) a
left join
(select * from temp2 where [司售卡编码] != '' ) b
on a.[tjrlposcardid] = b. )e where e.[实际出场时间] is not null) f ----3222
select * into temp6 from (
select a.tjrlcardno,a.tjrlposid,a.tjrlrdate,a.tjrlrtime,a.[tjrlsdate] ,a.[tjrlcdkind] ,a.[tjrlamt],a.[tjrlstatid] ,a.[tjrlunitid],a.[tjrlorgamt],
a.[tjrlposcardid],a. as platenum
from (
select b.*,ROW_NUMBER() over (partition by tjrlcardno,tjrlposcardid order by delta) as rn
from (select * from temp5 where delta > 0) b) a where rn = 1 )g --1593 根据实际出场时间筛选又配了一部分
/*把三次匹配的表整合*/
select * into [temp].[dbo].[jy623_plate3] from (
select distinct c.* , d.platenum as platenum2 from
(
select distinct a.*, b.platenum as platenum1 from
(select * from temp0) a
left join
(select * from [temp].[dbo].[jy623_plate2]) b
on a.tjrlcardno = b.tjrlcardno and a.tjrlrtime = b.tjrlrtime) c
left join
(select * from temp6) d
on c.tjrlcardno = d.tjrlcardno and c.tjrlrtime = d.tjrlrtime) g -----887667
update [temp].[dbo].[jy623_plate3]
set platenum = platenum1 where platenum is null and platenum1 is not null
update [temp].[dbo].[jy623_plate3]
set platenum = platenum2 where platenum is null and platenum2 is not null
/*最终生成的挂车牌交易记录[temp].[dbo].[jy623_platematch]*/
select * into [temp].[dbo].[jy623_platematch] from (
select distinct a.tjrlcardno,a.tjrlposid,a.tjrlrdate,a.tjrlrtime,a.[tjrlsdate] ,a.[tjrlcdkind] ,a.[tjrlamt],a.[tjrlstatid] ,a.[tjrlunitid],a.[tjrlorgamt],
a.[tjrlposcardid],a.platenum from [temp].[dbo].[jy623_plate3] a) b
/*匹配结果*/
select * from [temp].[dbo].[jy623_platematch] where platenum is null ---5834
select count(distinct tjrlposid) from [temp].[dbo].[jy623_platematch] where platenum is null --70
select count(distinct tjrlposid) from [temp].[dbo].[jy623_platematch] ---5453
/*电子路单及交易数据时间处理*/
delete from [temp].[dbo].[dzld623] where sxx is null
update [temp].[dbo].[dzld623] set SJFCSJ = SUBSTRING(SJFCSJ,4,1)+SUBSTRING(SJFCSJ,1,2)+SUBSTRING(SJFCSJ,11,2)+ SUBSTRING(SJFCSJ,14,2)+SUBSTRING(SJFCSJ,17,2)
UPDATE [temp].[dbo].[dzld623] SET SJDDSJ = SUBSTRING(SJDDSJ,4,1)+SUBSTRING(SJDDSJ,1,2)+SUBSTRING(SJDDSJ,11,2)+ SUBSTRING(SJDDSJ,14,2)+SUBSTRING(SJDDSJ,17,2)
update [temp].[dbo].[jy623_platematch] set tjrlrtime = substring(tjrlrdate,6,3)+tjrlrtime
/*错位填补*/
---select * into temp21 from(select * from [temp].[dbo].[dzld623] where fczdmc not like '%场' and ddzdmc not like '%场')a
SELECT * INTO temp21 FROM (SELECT a.* , lag(SJDDSJ, 1, 0) over(PARTITION BY CPH ORDER BY SJFCSJ) changefc FROM [temp].[dbo].[dzld623] a) C ---64292
update temp21 set changefc = SJFCSJ-10000 where changefc = '0' ----5373
/*匹配*/
select * into temp22 from
(
select distinct a.*,b.XLMC,b.sxx,b.SJFCSJ,b.FCZDMC, b.SJDDSJ,b.DDZDMC,b.changefc from
(select distinct * from [temp].[dbo].[jy623_platematch])a
left join
(select distinct * from TEMP21) b
ON a.platenum = b.CPH
where a.tjrlrtime >= b.changefc and a.tjrlrtime < b.SJDDSJ) c ---742555
/*配上方向的全量交易数据*/
select * into [temp].[dbo].[jy623_sxxmatch] from (
select * from (
select distinct a.*, b.XLMC,b.sxx,b.SJFCSJ,b.FCZDMC, b.SJDDSJ,b.DDZDMC from
(select distinct * from [temp].[dbo].[jy623_platematch]) a
left join
(select distinct * from temp22) b
on a.tjrlcardno = b.tjrlcardno and a.tjrlrtime = b.tjrlrtime and a.tjrlposid = b.tjrlposid and a.tjrlcdkind= b.tjrlcdkind and a.tjrlamt=b.tjrlamt) c
group by c.tjrlcardno,c.tjrlposid,c.tjrlrdate,c.tjrlrtime,c.DDZDMC,c.FCZDMC,c.platenum,c.SJDDSJ,c.SJFCSJ,c.SXX,c.tjrlamt,c.tjrlcdkind,
c.tjrlorgamt,c.tjrlposcardid,c.tjrlsdate,c.tjrlstatid,c.tjrlunitid,c.XLMC)d -----887667
/*检查为什么有的没有配上*/
--因为有的交易记录没有配上车牌
select count(*) from [temp].[dbo].[jy623_sxxmatch] where sxx is null and platenum is null ---5834
--交易记录中的车牌在电子路单中找不到
select * from [temp].[dbo].[jy623_sxxmatch] where sxx is null and
platenum in (
select a.platenum from
(select distinct platenum from [temp].[dbo].[jy623_sxxmatch] where sxx is null and platenum is not null) a
left join
(select distinct cph from [temp].[dbo].[dzld623]) b
on a.platenum = b.cph where b.cph is null) ---137834
--交易记录时间匹配不上
--存在车牌、pos、司售卡不一致
/*以上情况对应的电子路单记录*/
select * from [temp].[dbo].[dzld623] where cph in(
select distinct platenum from [temp].[dbo].[jy623_sxxmatch] where sxx is null and
platenum not in (
select a.platenum from
(select distinct platenum from [temp].[dbo].[jy623_sxxmatch] where sxx is null and platenum is not null) a
left join
(select distinct cph from [temp].[dbo].[dzld623]) b
on a.platenum = b.cph where b.cph is null) ) order by cph,sjfcsj
/*以上情况对应的交易记录*/
select * from [temp].[dbo].[jy623_sxxmatch] where sxx is null and
platenum not in (
select a.platenum from
(select distinct platenum from [temp].[dbo].[jy623_sxxmatch] where sxx is null and platenum is not null) a
left join
(select distinct cph from [temp].[dbo].[dzld623]) b
on a.platenum = b.cph where b.cph is null) order by platenum,tjrlrtime
/*-----------------挂站点------------------------*/
select * into [temp].[dbo].[623dlz] from
(
SELECT distinct * FROM [temp2].[dbo].[dlz1]
union
SELECT distinct * FROM [temp2].[dbo].[dlz2]
union
SELECT distinct * FROM [temp2].[dbo].[dlz3]) a ---2105897
---把行车方向不等于0/1的记录删除
delete from [temp].[dbo].[623dlz] where direction not in (0,1) --668
---GPS是断点采集因此将到达时间前推5s扩大时间切片范围
select * into temp31 from (
select a.*,(case when a.arrive=0 then DATEADD(ss,-5,a.gpstime) else a.gpstime end) as gpstime_change
from temp31 a) b --2105229
---首发站状态为离开的记录,对离开时间进行更新,避免在首发站提前上车刷卡的记录无法匹配的清况
update temp31 set gpstime_change = DATEADD(mi,-10,gpstime) where [LEVELS] = 1 and arrive = 1 ---65752
update temp31 set arrive = 0 where [LEVELS] = 1 and arrive = 1 ---65752
---按到站时间做切片只保留arrive =0
select * into temp32 from (select * from temp32 where arrive = 0) a ---1139816
---对时间格式进行统一
select * into temp33 from
(select a.*,
substring(a.gpsdate,4,1)+substring(a.gpsdate,1,2)+substring(CONVERT(CHAR(8),a.gpstime_change,108),1,2)+substring(CONVERT(CHAR(8),a.gpstime_change,108),4,2)+substring(CONVERT(CHAR(8),a.gpstime_change,108),7,2)
as ddsj from temp32 a) b
---对时间进行错位补充
SELECT * INTO temp34 FROM (SELECT a.* , lead(ddsj, 1, 0) over(PARTITION BY vehicleid ORDER BY ddSJ) changeddsj FROM temp33 a) C ---1139816
select * into temp35 from(
select a.*,
substring(a.gpsdate,4,1)+substring(a.gpsdate,1,2)+substring(CONVERT(CHAR(8),a.temp,108),1,2)+substring(CONVERT(CHAR(8),a.temp,108),4,2)+substring(CONVERT(CHAR(8),a.temp,108),7,2) as temp2
from
(select b.*, DATEADD(mi,5,gpstime_change) as temp from temp34 b) a)c ---1139816
update temp35 set changeddsj = temp2 where changeddsj = '0' ---5354
update temp35 set changeddsj = substring(changeddsj,1,2)+'4'+substring(changeddsj,4,9) where ddsj > changeddsj
update temp35 set DIRECTION = '下行' where direction = '1'
update temp35 set DIRECTION = '上行' where direction = '0'
---匹配
select * into temp36 from
(select distinct [VEHICLEID],[VEHICLENUMBERING] ,[ROADSORT] ,[GPSDATE] ,[GPSTIME] ,[LEVELS] ,[DIRECTION] ,[ARRIVE] ,[SOURCE] ,[STOPREPORTINGTYPE] ,[SAVEDATE],[gpstime_change]
,[ddsj] ,[changeddsj] from temp35) a
select * into temp37 from
(
select a.* , b.roadsort,b.gpstime,b.levels from
(SELECT * FROM [temp].[dbo].[jy623_sxxmatch] ) a
left join
(select * from temp36) b
on a.platenum = b.vehicleid and a.sxx = b.direction
where a.tjrlrtime >= b.ddsj and a.tjrlrtime < b.changeddsj ) c ---719082 //718969
/*配上站点的全量交易数据*/
select * into [temp].[dbo].[jy623_stationmatch] from (
select distinct * from (
select distinct a.*, b.roadsort,b.gpstime,b.levels from
(select distinct * from [temp].[dbo].[jy623_sxxmatch]) a
left join
(select distinct * from temp37) b
on a.tjrlcardno = b.tjrlcardno and a.tjrlrtime = b.tjrlrtime and a.tjrlposid = b.tjrlposid and a.tjrlcdkind= b.tjrlcdkind and a.tjrlamt=b.tjrlamt) c)d
----------------------------------------
select * from (
select a.platenum , b.vehicleid from
(select distinct platenum from [temp].[dbo].[jy623_stationmatch] where sxx is not null and roadsort is null) a
left join
(select distinct vehicleid from [temp].[dbo].[623dlz])b
on a.platenum = b.VEHICLEID) c
where c.vehicleid is null
select * from [temp].[dbo].[jy623_stationmatch] where sxx is not null and roadsort is null
select count(*) from [temp].[dbo].[jy623_sxxmatch] where sxx is not null
select distinct platenum from [temp].[dbo].[jy623_stationmatch] where sxx is not null and roadsort is null
select * into temp555 from
(select * from [temp].[dbo].[jy623_stationmatch] where roadsort = '55') a
select * into temp556 from (
select a.*,b.[站点名称] from
(select * from temp555) a
left join
(SELECT * FROM [temp2].[dbo].[Sheet1$]) b
on a.sxx = b.[] and a.levels = b.[站级]) d
select distinct [站点名称] ,sxx, count(*) as num from temp556 group by [站点名称],sxx order by num desc
select sum()* from temp556