从 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
我有一个 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