我有一张桌子:
| 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
有人可以帮忙吗?
答案 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
干杯!