使用Where条件而不是使用group by的聚合函数

时间:2013-06-18 05:21:04

标签: postgresql pivot

我有一个名为日历表的表,其中包含年,月,周,日和日等列。 day field的值为1,2,.... 7。

我想从中创造时间跨度。比如从周一到周二(12:00),周二(12:00)到周三(17:00)。一周之内

为此,我正在写一个像

这样的查询
SELECT 
    year, 
    week, 
    (SELECT date WHERE day = 1) AS st_date,
    (SELECT date WHERE day = 2) AS end_date 
FROM calendar 
GROUP BY year, week

我知道上面的语法不正确,请告诉我是否有任何可能的语法来解决这个问题?

实际的表定义是日语,所以我用英文列名替换它。这是一个与我们的常规日历不同的日历表

在注册工具中,我想为用户创建一个时间段,在该时间段内用户不能注册。

我的原始表格如下:

Date        Year    Month  Week   Day
--------------------------------------------
2013/06/19   34      06     44    3
2013/06/21   34      07     44    5
2013/06/24   34      07     45    1 
2013/06/25   34      07     45    2
2013/06/26   34      07     45    3

我喜欢输出

Year    Week    A_reg_range_st             A_reg_range_end        B_reg_range_st             B_reg_range_end
-----------------------------------------------
34      45      2013/06/24 00:00:00      2013/06/25 12:00:00        2013/06/25 12:00:00      2013/06/26 17:00:00

1 个答案:

答案 0 :(得分:1)

SELECT 
    year, 
    week, 
    CASE WHEN (day = 1) THEN date  AS st_date,
    CASE WHEN (day = 2) THEN date  AS end_date
FROM calendar 
GROUP BY year, week