【问题标题】:Is there a way to classify two date columns by column name in SQL?有没有办法在 SQL 中按列名对两个日期列进行分类?
【发布时间】:2021-03-24 15:22:48
【问题描述】:

PostgreSQL 8.0.2; Redshift中的表格

我有一个表格,其中包含两个日期列,分别代表案例的开始日期和结束日期。我正在尝试每周计算每周有多少案件开始和解决。

表格

该表包含案例 ID、案例开始日期、开始周、案例解决日期、解决周:

case_id | start_date | start_week | resolved_date | resolved_week
--------+------------+------------+---------------+--------------
101     | 2020-01-01 |     1      | 2020-01-09    |      2
102     | 2020-01-01 |     1      | 2020-01-11    |      2
103     | 2020-01-09 |     2      | 2020-01-11    |      2
104     | 2020-01-10 |     2      | 2020-01-12    |      2
105     | 2020-01-17 |     3      | 2020-01-18    |      3
106     | 2020-01-25 |     4      | 2020-01-25    |      4

期望的结果

我需要按“第 # 周”组织数据,并计算开始和解决的案例数量,如下所示:

week | date_type | count
-----+-----------+------
  1  |  start    |  2
  2  |  start    |  2
  2  |  resolved |  4
  3  |  start    |  1
  3  |  resolved |  1
  4  |  start    |  1
  4  |  resolved |  1

一开始我以为可以用CASE语句把日期分为startresolved两类,但我觉得CASE只能用在记录中,而不是在列中。

我在SELECT 子句中尝试了COALESCE,这确实将所有日期合并为一列,但我不知道如何将它们分成start已解决

SELECT COALESCE(start_date, resolved_date) as "week", COUNT(case_id)
FROM table_1
GROUP BY 1;

当前结果

生产:

week | count
-----+------
  1  |  2
  2  |  6
  3  |  2
  4  |  2

【问题讨论】:

  • 您使用的是 Postgres 还是 Redshift?虽然它们有一些关系,但它们不是一回事。
  • select version(); 给出“i686-pc-linux-gnu 上的 PostgreSQL 8.0.2......Redshift 1.0.24421”
  • “CASE 只能在记录中使用,不能与列一起使用” - 抱歉,这是完全倒退的。在数据库术语中,记录被称为行(又名元组)。和行一致的列。现在将我们限制在该域中,CASE 只能用于列而不是行。

标签: sql postgresql amazon-redshift


【解决方案1】:

在 Redshift 中,您可以使用 union all 取消透视然后聚合:

select week, what, count(*)
from ((select start_week as week, 'start' as what
       from t
      ) union all
      (select resolved_week as week, 'resolved' as what
       from t
      )
     ) w
group by week, what
order by week;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 2021-04-06
    • 2012-02-29
    • 1970-01-01
    • 2021-01-14
    • 2022-01-16
    相关资源
    最近更新 更多