sql - FirebirdSQL Unique & Max(或 MaxValue)

标签 sql max unique firebird greatest-n-per-group

我想对过去两年内订购过的任何客户的销售情况生成一份报告。

我可以运行两年内所有发票的报告,然后删除 Excel 中的重复项,但我宁愿直接在 (Firebird) SQL 中执行此操作

我可以使用WHERE date < 1 Jan 2015 (2年或更久),但是我如何让它只向客户展示一次?我想如果我使用 MAX(Date)因此显示该两年期间的最近日期。我哪里出错了?我相信我需要使用 UNIQUE()功能类似于 UNIQUE(ORDERCUSTOMER)在 SELECT 子句中。

SELECT
FINANCIALSALESINVOICES.TRANSACTIONDATE,
FINANCIALSALESINVOICES.INVOICECUSTOMER, 
FINANCIALSALESINVOICES.ORDERCUSTOMER,
FINANCIALSALESINVOICES.INVOICENUMBER,
FINANCIALSALESINVOICES.SOURCENUMBER,
MAX(FINANCIALSALESINVOICES.TRANSACTIONDATE)

FROM FINANCIALSALESINVOICES 
WHERE (FINANCIALSALESINVOICES.TRANSACTIONDATE>={d '2015-01-01'})
ORDER BY FINANCIALSALESINVOICES.INVOICECUSTOMER, FINANCIALSALESINVOICES.TRANSACTIONDATE

我确实显示了过去两年中每个发票实例的最大日期,但现在无法修改该文件或复制它。

最佳答案

一种方法是在 WHERE 子句中使用子查询来检查最新的发票:

SELECT
    t.TRANSACTIONDATE,
    t.INVOICECUSTOMER, 
    t.ORDERCUSTOMER,
    t.INVOICENUMBER,
    t.SOURCENUMBER
FROM FINANCIALSALESINVOICES t
WHERE t.TRANSACTIONDATE >= date '2015-01-01' AND
      t.TRANSACTIONDATE = (SELECT MAX(f.TRANSACTIONDATE)
                           FROM FINANCIALSALESINVOICES f
                           WHERE t.ORDERCUSTOMER = f.ORDERCUSTOMER AND
                                 f.TRANSACTIONDATE >= date '2015-01-01')
ORDER BY t.INVOICECUSTOMER,
         t.TRANSACTIONDATE

关于sql - FirebirdSQL Unique & Max(或 MaxValue),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43905031/

相关文章:

java - 如何从结果集中获取计数?

mysql - 从 mysql 表中选择最大金额

algorithm - 如何从最小-最大堆中删除最大元素?

r - 如何从数据表中的列子集中提取唯一行?

mysql - sql连接具有不同值的同一列

c# - Entity Framework - 创建导航属性

c - 使用 cuda Throw::max_element 查找数组中的最大元素有时返回不正确

r - 计算每个唯一元素在列表中出现的次数

php - 合并两个包含对象的数组并删除重复值

mysql - 大型聊天应用程序 Mysql 数据库消息存储 每条消息 1 行或将整个线程附加到 1 个长文本字段