2017-01-09 1 views
0
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) 

ich speziell den Fehler bei der min(end_date,end_date2), mit Störung zu erhalten:Fehler bei der Einnahme der min zwischen zwei Terminen

[42883] ERROR: function min(date, date) does not exist Hint: No function matches the given name and argument types. You may need to add explicit type casts.

+0

's.optimized_transaction_date <= Fall, wenn end_date

+0

Sie könnten umschreiben als:' ... UND s.optimized_transaction_date <= end_date AND s.optimized_transaction_date <= end_date2) '(Wenn es kleiner als das kleinere von 2 Daten ist, muss es kleiner sein als beide.) –

Antwort

2

Verwenden LEAST() statt 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) 

Beachten Sie, dass Ich habe Ihre implizite Verknüpfung durch eine explizite INNER JOIN ersetzt. In der Regel sollten Sie die Verwendung von Kommas in der FROM Klausel vermeiden.

lesen here für weitere Informationen über LEAST() Postgres Funktion

Verwandte Themen