【发布时间】:2020-02-09 18:36:08
【问题描述】:
我有一张针对特定用户的多行表。我有 2019、2018、2016 等多年的数据。我有两个 场景:
1.我想要特定 INVOICE_YEAR 的数据。
2,但同时我想要为特定发票生成的第一日期 用户。
我的 sql 查询:
$yearOf这是动态年份输入变量。
$yearOf = 2019;
$Records = "SELECT MIN(inv.INVOICE_DATE) AS MIN_INVOICE_DATE
FROM invoices as inv
LEFT JOIN customers as cm ON cm.CUSTOMER_ID = inv.CUSTOMER_ID
where inv.INVOICE_YEAR IN (".$yearOf.")
group by inv.CUSTOMER_ID ORDER BY cm.CUSTOMER_NAME ASC";
您可以看到我的查询,如果我想要 INVOICE_YEAR IN ('2019') 的所有用户的数据。我的第一个条件将满足,我将获得 INVOICE_YEAR = 2019 的用户的所有数据。
但同时我想要第一个发票日期,所以为此我使用了MIN(inv.INVOICE_DATE),但因为我使用了where inv.INVOICE_YEAR IN (".$yearOf."),所以它给了我特定年份的第一个发票日期。
但我想要所有用户的整个表中的第一个发票日期。
我尝试使用子查询,但它显示 子查询返回超过 1 行的错误
我的子查询查询:
$Records = "SELECT
(
SELECT MIN(inv.INVOICE_DATE) AS MIN_INVOICE_DATE FROM invoices AS inv GROUP BY inv.CUSTOMER_ID) AS MIN_INVOICE_DATE
FROM invoices as inv
LEFT JOIN customers as cm ON cm.CUSTOMER_ID = inv.CUSTOMER_ID
where inv.INVOICE_YEAR IN (".$yearOf.")
group by inv.CUSTOMER_ID ORDER BY cm.CUSTOMER_NAME ASC";
例如:
有 3 个客户 101,102,103
表中的数据如下:
id | customer_id | invoice_date | invoice_year
1 | 101 | 2019-01-01 | 2019
2 | 101 | 2016-01-01 | 2016
3 | 101 | 2017-01-01 | 2017
4 | 101 | 2016-01-02 | 2016
5 | 102 | 2019-01-02 | 2019
6 | 103 | 2018-01-02 | 2018
7 | 103 | 2019-01-07 | 2019
8 | 102 | 2015-01-02 | 2015
由于我请求查询以获取 INVOICE_YEAR 2019 的数据以及特定用户的第一个发票日期,因此它应该提供如下输出:
id | customer_id | invoice_date | invoice_year | min_invoice_date
1 | 101 | 2019-01-01 | 2019 | 2016-01-01
5 | 102 | 2019-01-02 | 2019 | 2015-01-02
7 | 103 | 2019-01-07 | 2019 | 2019-01-07
如我所愿所有用户的第一个发票日期 IN COLUMN MIN_INVOICE_DATE。
但它向我显示的数据如下:
id | customer_id | invoice_date | invoice_year | min_invoice_date
1 | 101 | 2019-01-01 | 2019 | 2019-01-01
5 | 102 | 2019-01-02 | 2019 | 2019-01-02
7 | 103 | 2019-01-07 | 2019 | 2019-01-07
【问题讨论】:
-
请添加示例数据和预期结果以澄清您的问题。
-
@GMB 请查看我添加的示例以简要了解我的问题,谢谢
-
I removed the blockquote 更早。你为什么又把它们加回来了?
-
即使 2019 年该用户有很多发票,您也只希望每个用户有 1 行?如果是,你会展示哪一个?
-
Blockquote 是用于错误消息或引用某些内容,而不是为了您自己的个人突出享受。你为什么用那些?我觉得我已经置若罔闻了。
标签: php mysql group-by subquery min