增量业务数据表 查询繁琐,也要避免错误

/*
增量业务数据表
Id 自增id
BusId 业务主键
DataDate 增量数据所在的日期
*/
create table #room(Id int, BusId int, BusNo varchar(100), BusCode varchar(100), BusArea decimal(10,2), ts int, DataDate datetime)
-- 数据日期2018-09-01
INSERT INTO #room (Id, BusId, BusNo, BusCode, BusArea, ts, DataDate)
VALUES ('1', '40', 'xxxxxxxxx', 'yyyyy', '22.00', '1499639', '2018-09-01 17:39:24');
-- 数据日期2018-11-01
INSERT INTO #room (Id, BusId, BusNo, BusCode, BusArea, ts, DataDate)
VALUES ('2', '40', 'xxxxxxxxx', 'yyyyy', '24.00', '1499639', '2018-11-01 17:39:24');
-- 数据日期2018-10-01,发现10.1数据遗漏,补充.id变=3
INSERT INTO #room (Id, BusId, BusNo, BusCode, BusArea, ts, DataDate)
VALUES ('3', '40', 'xxxxxxxxx', 'yyyyy', '23.00', '1499639', '2018-10-01 17:39:24');

select * from #room
--查询2018-11-02日的最新数据

--现在实现版本,返回id=3的错误数据
select r.* from #room r join
(select max(id) id from #room where DataDate<='2018-11-02' group by BusId) rMax on rMax.id=r.Id

--数据正确版本,返回id=2的正确数据
-- 因为日期字段做条件会变慢,当时没有采取
-- 建议加一列 ImportTimeTS int,对应DataDate的ts.作为条件
select r.* from #room r join
(select max(DataDate) DataDate,BusId from #room where DataDate<='2018-11-02' group by BusId) rMax
on rMax.DataDate=r.DataDate and rMax.BusId=r.BusId

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 超高速音视频编码器用法: ffmpeg [options] [[infile options] -i infile...
    吉凶以情迁阅读 4,705评论 0 4
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,537评论 0 13
  • 许多时候我都像被抽离了的第三灵魂。 看着别人的故事 感慨自己的人生 把自己外向的人格以逗比的形式逼出来 渐渐潜藏了...
    红发小矮人阅读 262评论 0 0
  • 日精进 郑州 坚持原创分享第60天 2017年8月27日 星期日 晴 两个小家伙因为乱吐葡萄皮,被罚面壁思过.几分...
    小莲蓬儿阅读 169评论 0 0
  • 旧屋破桌枯木, 黑夜圆月老树。 昏灯冷风热茶,
    J丶蓝烟阅读 287评论 0 1