我有一个查询,它返回一组记录,如下所示: -
Date Dept commission
5-Apr Sales 20
4-Apr Sales 21
1-Jan Marketing 35
案例1:如果我在1月1日至5月5日之间运行查询,我应该
Date Dept commission
5 April Sales 76
案例2:当我在jan 1和jan 31之间运行查询时,输出应为
Date Dept commission
1 Jan Marketing 35
案例2很简单,因为当我把日期范围得到所需的结果,但不知道如何处理案例1以显示最大/最新日期,该日期的部门和该部门的佣金总和,所选日期范围的日期。输出将是包含最新日期和部门的单行,其中包含所选日期范围的总和(佣金)。
答案 0 :(得分:3)
SELECT
MAX(Date) AS Date
, ( SELECT tt.Dept
FROM tableX tt
WHERE tt.Date = MAX(t.Date)
) AS Dept
, SUM(Commission) AS Commission
FROM
tableX t
WHERE
Date BETWEEN StartDate AND EndDate
上述工作在SQL-Server,MySQL,Postgres中显示为sql-fiddle, test-1,但它在Oracle 11g R2中不起作用!
这虽然有效(sql-fiddle, test-2):
SELECT
MAX(t.Date) AS Date
, MIN(tt.Dept) AS Dept --- MIN, MAX irrelevant
, SUM(t.Commission) AS Commission
FROM
( SELECT
MAX(Date) AS Date
, SUM(Commission) AS Commission
FROM
tableX
WHERE
Date BETWEEN StartDate AND EndDate
) t
JOIN
tableX tt
ON tt.Date = t.Date
MIN(tt.Dept)
用于处理您拥有超过最大日期的行的情况,例如Sales
的一行和Marketing
的一行,{{1} }}
这也可以使用Apr-5
分析函数(sql-fiddle, test-3):
LAST_VALUE