获取上个月的价值

时间:2019-07-17 17:15:17

标签: sql oracle

我有一张桌子:

| Month      | End Date             |
| 06/01/2019 | 07/02/2019 12:35:00  |
| 07/01/2019 | 08/03/2019 2.33.20   |

我想将下个月的开始日期显示为上个月的结束日期的第二秒。

结果:

| Month      | End Date             | Start Date          |
| 06/01/2019 | 07/02/2019 12:35:00  | NULL                |
| 07/01/2019 | 08/03/2019 2.33.20   | 07/02/2019 12:35:01 |
| 08/01/2019 | 09/03/2019 2.33.07   | 08/02/2019 2:33:21  |

.... so on

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

使用[22] [14] [10] [8] [7] [1] Finished! 分析函数:

Oracle设置

[22, 14, 10, 8, 7, 1]

查询

LAG

输出

MONTH               | END_DATE            | START_DATE         
:------------------ | :------------------ | :------------------
2019-06-01 00:00:00 | 2019-07-02 12:35:00 | null               
2019-07-01 00:00:00 | 2019-08-03 02:33:20 | 2019-07-02 12:35:01
2019-08-01 00:00:00 | 2019-09-03 02:33:07 | 2019-08-03 02:33:21

db <>提琴here

答案 1 :(得分:1)

MT0已经提供了Oracle语法。我不熟悉Oracle,但这是我将用于此目的的SQL Server语法,也许对其他人有用。

CREATE TABLE #temp (mnt DATE, enddate DATETIME)

INSERT INTO #temp VALUES ('2019-06-01','2019-07-02 12:35:00'),('2019-07-01','2019-08-03 12:35:00')

;WITH cte AS (
   SELECT *,rn=ROW_NUMBER() OVER(ORDER BY mnt ASC)
   FROM #temp 
)
SELECT cte.mnt,cte.enddate, startdate=DATEADD(SECOND,1,cte2.enddate) 
FROM cte 
LEFT outer JOIN cte cte2 ON cte2.rn = cte.rn-1

哦,我不知道SQL Server上没有LAG,很高兴学习新知识。 IT也可以:

SELECT mnt,
       enddate, 
       DATEADD(SECOND,1,LAG( enddate ) OVER ( ORDER BY enddate )) AS start_date
FROM   #temp

答案 2 :(得分:1)

我尝试了不使用解析函数的查询。为用户添加不同的答案!

SELECT T1.month,
       T1.end_date,
       T2.END_DATE + INTERVAL '1' SECOND AS START_DATE
FROM   my_table t1
LEFT JOIN my_table T2 ON T2.MONTH = ADD_MONTHS(T1.MONTH,-1)
ORDER BY T1.MONTH

db<>fiddle demo

干杯!