从 table 中的同一列获取 'from date' 和 'to date' 的日期

Get date as 'from date' and 'to date' from same column in table

我有一个 table,它有一个 timestamp 字段 'changed_date'。我想将 'changed_date' 作为 'from_date' 和 'to_date'。也就是说,对于每一行,'from_date' 值应该来自前一行的 'changed_date' 值。 例如:

我想得到与 'project_id' 分组的结果。我想得到:

first row as:         null - 2015-07-02
second row as:  2015-07-02 - 2015-07-15
third row as:   2015-07-15 - 2015-07-28 

不明白你想要什么..

你在寻找类似

的东西吗
SELECT DATEADD(day,-1, changed_date) AS from_date, changed_date AS to_date FROM YOUR_TABLE;

您需要一个 window 函数来高效地执行此操作:

SELECT id, percentage, vat, service_tax, labor_welfare,
       daterange(lag(changed_date) OVER (PARTITION BY project_id ORDER BY changed_date)::date,
                  changed_date::date, '()') AS changed_date_range, project_id
FROM my_table
ORDER BY project_id, changed_date;

输出是一个 daterange,看起来像“(2015-07-02, 2015-07-15)”。如果您更喜欢字符串格式,您可以将 daterange(...) 短语更改为:

(to_char(lag(changed_date) OVER (PARTITION BY project_id ORDER BY changed_date), 'YYYY-MM-DD') ||
' - ' || to_char(changed_date, 'YYYY-MM-DD') AS changed_date_range

或者您可以只包含两列:

lag(changed_date) OVER (PARTITION BY project_id ORDER BY changed_date) AS date_from,
changed_date AS date_to