17,082
社区成员
发帖
与我相关
我的任务
分享
UPDATE BOOK SET START_TIME='2018-09-19'
WHERE ID IN(
SELECT ID FROM(
SELECT ID,NAME,PRICE,START_TIME,END_TIME,
ROW_NUMBER() OVER(PARTITION BY NAME ORDER BY
START_TIME DESC)RN FROM BOOK
ORDER BY NAME,START_TIME DESC)
WHERE RN=1
)
UPDATE BOOK SET END_TIME='2018-09-19'
WHERE ID IN(
SELECT ID FROM(
SELECT ID,NAME,PRICE,START_TIME,END_TIME,
ROW_NUMBER() OVER(PARTITION BY NAME ORDER BY
START_TIME DESC)RN FROM BOOK
ORDER BY NAME,START_TIME DESC)
WHERE RN=2
)
先获取A,B的最后记录的生效日的ID
select test.ID from test where test.name='A' and test.Stime=(select MAX(test.Stime)from test)
select test.ID from test where test.name='B' and test.Stime=(select MAX(test.Stime)from test)
再获取A,B 上一条的截止日的ID
select test.ID from test where test.name='A' and test.ID=(select test.ID from test where test.name='A' and test.Stime=(select MAX(test.Stime)from test))-1
select test.ID from test where test.name='B' and test.ID= (select test.ID from test where test.name='B' and test.Stime=(select MAX(test.Stime)from test))-1
最后用case when then
UPDATE t SET t.Stime=CASE WHEN t.ID=(select test.ID from test where test.name='A' and test.Stime=(select MAX(test.Stime)from test)) THEN '2017-05-01' WHEN t.ID=(select test.ID from test where test.name='B' and test.Stime=(select MAX(test.Stime)from test)) THEN '2017-05-01' ELSE t.Stime end
, t.Etime=case when t.ID=(select test.ID from test where test.name='A' and test.ID=(select test.ID from test where test.name='A' and test.Stime=(select MAX(test.Stime)from test))-1
) then '2017-05-01' WHEN t.ID=(select test.ID from test where test.name='B' and test.ID= (select test.ID from test where test.name='B' and test.Stime=(select MAX(test.Stime)from test))-1) THEN '2017-05-01' ELSE t.Etime end
FROM test AS t