取两个日期之间的最小值时出错

Posted

技术标签:

【中文标题】取两个日期之间的最小值时出错【英文标题】:Error when taking the min between two dates 【发布时间】:2017-01-09 01:18:04 【问题描述】:
DROP TABLE IF EXISTS tmp1_variables;
CREATE TEMPORARY TABLE tmp1_variables AS (
SELECT
    '2016-10-29'::date as start_date,
'2017-01-28'::date as end_date2,
dateadd(day,-13,getdate())::date as end_date);


SELECT cobrand_id, sum(calc) AS a, sum(count) AS b FROM jwn_calc s, tmp1_variables
        where s.optimized_transaction_date > start_date
AND s.optimized_transaction_date <= min(end_date,end_date2) 

我特别在min(end_date,end_date2) 收到错误,错误:

[42883] 错误:函数 min(date, date) 不存在 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

【问题讨论】:

s.optimized_transaction_date &lt;= case when end_date &lt; end_date2 then end_date else end_date2 end 您可以改写为:... AND s.optimized_transaction_date &lt;= end_date AND s.optimized_transaction_date &lt;= end_date2)(如果小于两个日期中的较小者,则必须小于两个日期。) 【参考方案1】:

使用LEAST() 代替MIN()

SELECT cobrand_id,
       SUM(calc) AS a,
       SUM(count) AS b
FROM jwn_calc s
INNER JOIN tmp1_variables t
    ON s.optimized_transaction_date > t.start_date AND
       s.optimized_transaction_date <= LEAST(t.end_date, t.end_date2)

请注意,我已将您的隐式连接替换为显式 INNER JOIN。作为一般规则,您应该避免在FROM 子句中使用逗号。

阅读 here 了解有关 Postgres 的 LEAST() 功能的更多信息

【讨论】:

以上是关于取两个日期之间的最小值时出错的主要内容,如果未能解决你的问题,请参考以下文章

在嵌套列表中查找最小值时出错

Oracle根据连续性日期的重复数据取最大或最小值日期

bzoj 2238

sql查询时间最小值的列

Linux 文件名 按照日期 取最大最小时间值

怎么给参数赋两个值