簡體   English   中英

從 T-SQL 中一列的連續日期創建兩列

[英]Creating two columns from consecutive dates of a column in T-SQL

我有一張這樣的桌子。

row_number   date          
----------   ----
1           2018-01-15
2           2018-01-27
3           2018-03-20
4           2019-01-30

我的目標是像下面這樣。

beginning_date     ending_date
--------------     -----------
 2018-01-15        2018-01-27
 2018-01-27        2018-03-20
 2018-03-20        2019-01-30

在 T-Sql 中進行此操作需要什么樣的查詢? 我怎樣才能將第 4 行(表有其他列)的信息帶入新的開始和結束日期表?

你需要lead()

select t.*
from (select t.row_number, t.date, lead(date) over (order by t.row_number) as ending_date
      from table t
     ) t
where ending_date is not null;

編輯:如果你想要所有的行然后刪除過濾器:

select t.row_number, t.date, lead(date) over (order by t.row_number) as ending_date
from table t;

如果您想要與沒有結束日期的開始日期相同的日期,那么您可以執行以下操作:

lead(date, 1, date) over (order by t.row_number) as ending_date

您可以使用lead()

select date as beginning_date, ending_date
from (select t.*, lead(date) over (order by date) as ending_date
      from t
     ) t
where ending_date is not null;

這是另一個選項(相同的邏輯,不同的格式):

SELECT beginning_date, ending_date
FROM (
  SELECT
    MAX(date) OVER(
      ORDER BY row_number ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
    ) AS beginning_date,
    date AS ending_date
  FROM mytable
) src
WHERE beginning_date IS NOT NULL -- Ignore first row

SQL小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM