使用最少的DatePart?

时间:2014-09-12 20:28:05

标签: sql postgresql

我在八月份运行查询,但我想将其转换为date_part函数。

这是原始查询。

SELECT avg(CASE WHEN date = LEAST(current_date-1,'8/31/14') THEN bo ELSE NULL END) end_bo 
From <table>

我正在尝试做的是将LEAST插入下面的那个。

SELECT avg(CASE WHEN date_part('month', date) = 8 and date_part('year', date) = 2014 THEN bo ELSE NULL END) end_bo
From <table>

问题是,我看不到我可以将其插入的地方。

1 个答案:

答案 0 :(得分:3)

第一个查看哪个日期更早,currentdateAug 31 2014,如果它等于date则返回bo

第二个测试当前月份是aug 2014并返回bo

要将相同的逻辑应用于第二个查询,它可能如下所示:

SELECT avg(CASE 
           WHEN least(date_part('month', currentdate), 8) = date_part('month', date) 
                  and date_part('year', date) = 2014 
           THEN bo 
           ELSE NULL 
           END) end_bo

这将查看当前月份,查看是否低于8,将其与date个月进行比较,如果等于返回bo

LEAST只返回列表中的最小数字。所以least(9,8)(9月,8月)将返回8.