如何从teradata中的表中选择下一个日期

时间:2015-06-04 03:43:59

标签: sql teradata

我有包含以下信息的表格

Quarter_END_DATE | Flag 
2014/31/03       |  N 
2014/30/06       |  Y 
2014/30/09       |  N 
2014/31/12       |  N 

依旧......

无论何时运行查询,都应该更新下一季度flag to Yprevious to N

请提供实施此方案的解决方案。

3 个答案:

答案 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);