我有包含以下信息的表格
Quarter_END_DATE | Flag
2014/31/03 | N
2014/30/06 | Y
2014/30/09 | N
2014/31/12 | N
依旧......
无论何时运行查询,都应该更新下一季度flag to Y
和previous to N
请提供实施此方案的解决方案。
答案 0 :(得分:1)
将下一季度的旗帜更新为Y
(假设表格中只有一个Y
旗帜):
UPDATE [table_name] SET Flag = 'Y'
WHERE Quarter_END_DATE = DATEADD(day, 90, (
SELECT FIRST(Quarter_END_DATE)
FROM [table_name]
WHERE Flag = 'Y'));
将上一季度的旗帜更新为N
:
UPDATE [table_name] SET Flag = 'N'
WHERE Quarter_END_DATE = (
SELECT MIN(Quarter_END_DATE)
FROM [table_name]
WHERE Flag = 'Y'));
答案 1 :(得分:1)
UPDATE tab
FROM
( SELECT Quarter_END_DATE, Flag
FROM tab
QUALIFY Flag = 'Y' -- current row with 'Y'
OR MAX(Flag) -- next row to be set to 'Y'
OVER (ORDER BY Quarter_END_DATE
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) = 'Y'
) AS src
SET Flag = CASE WHEN src.Flag = 'Y' THEN 'N' ELSE 'Y' END -- switch the flag
WHERE tab.Quarter_END_DATE = src.Quarter_END_DATE
AND tab.Flag = src.Flag
;
答案 2 :(得分:0)
最好是陈述你正在操作的dbms,但是如果你在mysql中这样做,你可以:
update [table_name] set flag = 'N'
where flag = 'Y'
;
update [table_name] set flag = 'Y'
where quarter_end_date between now() and dateadd(now(), 90 DAYS);