【发布时间】:2018-04-07 18:40:52
【问题描述】:
USE dev_db
GO
CREATE TABLE T1_VALS
(
[SITE_ID] [int] NULL,
[LATITUDE] [numeric](10, 6) NULL,
[UNIQUE_ID] [int] NULL,
[COLLECT_RANK] [int] NULL,
[CREATED_RANK] [int] NULL,
[UNIQUE_ID_RANK] [int] NULL,
[UPDATE_FLAG] [int] NULL
)
GO
INSERT INTO T1_VALS
(SITE_ID,LATITUDE,UNIQUE_ID,COLLECT_RANK,CREATED_RANK,UNIQUEID_RANK)
VALUES
(207442,40.900470,59664,1,1,1)
(207442,40.900280,61320,1,1,2)
(204314,40.245220,48685,1,2,2)
(204314,40.245910,59977,1,1,1)
(202416,39.449530,9295,1,1,2)
(202416,39.449680,62264,1,1,1)
我从两个日期列(此处未显示)生成了COLLECT_RANK 和CREATED_RANK 列,并从此处使用的UNIQUE_ID 生成了UNIQUEID_RANK 列。
我使用带有排名函数的SELECT OVER 子句来生成这些列。 _RANK 值为 1 表示最新日期或最大 UNIQUE_ID 值。我认为我的解决方案通过数组和光标处理使用这些排名值非常简单,但我似乎把自己画到了一个角落。
我的问题:我需要根据以下业务规则选择LONGITUDE 值及其UNIQUE_ID,并在其UPDATE_FLAG 列中为该记录设置更新值(1)。
为给定的 SITE_ID 选择具有最近收集日期(即 RANK 值 = 1)的记录。如果存在具有相同收集日期(即相同 RANK 值)的多条记录,请为给定的 SITE_ID 选择具有最近创建日期(RANK 值 =1)的记录。如果存在多个具有相同创建日期的记录,请选择给定 SITE_ID 的具有最高唯一 ID 的记录(即 RANK 值 = 1)。
您的建议将不胜感激。
【问题讨论】:
标签: sql-server compare multiple-columns rows