MySQL,像stations和最早的日期问题一样计数
对于MySQL来说是相当陌生的,我对如何构建以下查询有点迷茫 下表显示了我希望我的预期输出是什么样的MySQL,像stations和最早的日期问题一样计数,mysql,mysql-workbench,Mysql,Mysql Workbench,对于MySQL来说是相当陌生的,我对如何构建以下查询有点迷茫 下表显示了我希望我的预期输出是什么样的 +---------+------------+-----------------+-------+----------+------------+ | Account | Inv Date | Description | Value | Inv Item | Eff From | +---------+------------+-----------------+-------
+---------+------------+-----------------+-------+----------+------------+
| Account | Inv Date | Description | Value | Inv Item | Eff From |
+---------+------------+-----------------+-------+----------+------------+
| 12 | 2018-08-14 | Unlimited (SV4) | 5.99 | 3056746 | 2018-08-02 |
| 12 | 2018-08-14 | Unlimited (SV4) | 5.99 | 3056748 | 2018-08-02 |
| 15 | 2018-09-14 | Unlimited (GB2) | 7.99 | 3187748 | 2018-09-07 |
| 15 | 2018-09-14 | Unlimited (GB1) | 7.26 | 3187749 | 2018-09-07 |
+---------+------------+-----------------+-------+----------+------------+
我想看到帐户有多个描述,如“无限”,在“投资日期”只需要显示每个帐户最早的日期。并且“Eff from”必须是从帐户上的“状态”第一次处于“活动”状态时开始
这是我目前的代码,我还包括了我试图加入的表
SELECT
AA.Account,
MIN(II.InvDate),
ST.Description,
ST.Value,
ST.InvItem,
MIN(AA.EffFrom)
FROM db.tblAccountStatus AA
INNER JOIN db.tblInvoiceID II ON II.Account = AA.Account
INNER JOIN db.tblInvoiceStatus ST ON ST.InvID = II.InvID
WHERE AA.Status = 'Active'
AND ST.Description LIKE '%Unlimited%'
GROUP BY ST.InvItem HAVING COUNT(II.InvDate) >1
内部连接具有最早日期记录的db.tblInvoiceID似乎很好,如下所示
SELECT
AA.Account,
II.InvDate,
ST.Description,
ST.Value,
ST.InvItem,
AA.EffFrom
FROM db.tblAccountStatus AA
INNER JOIN (
SELECT InvID, Account, MIN(InvDate) AS InvDate FROM db.tblInvoiceID
GROUP BY Account
) II ON II.Account = AA.Account
INNER JOIN db.tblInvoiceStatus ST ON ST.InvID = II.InvID
WHERE AA.Status = 'Active'
AND ST.Description LIKE '%Unlimited%'
GROUP BY ST.InvItem
以下是我的输出。虽然您的预期输出不包括
Account=17
,但我无法从您的问题中理解情况。如果你有其他条件,请教我
+---------+------------+------------------+-------+---------+------------+
| Account | InvDate | Description | Value | InvItem | EffFrom |
+---------+------------+------------------+-------+---------+------------+
| 12 | 2018-08-14 | Unlimited (SV4) | 5.99 | 3056746 | 2018-08-02 |
| 12 | 2018-08-14 | Unlimited (SV4) | 5.99 | 3056748 | 2018-08-02 |
| 17 | 2018-09-15 | Unlimited (SV1) | 5.99 | 3186788 | 2016-04-28 |
| 15 | 2018-09-14 | Unlimited (GB2) | 7.99 | 3187748 | 2018-09-07 |
| 15 | 2018-09-14 | Unlimited (GB1) | 7.26 | 3187749 | 2018-09-07 |
+---------+------------+------------------+-------+---------+------------+
5 rows in set (0.00 sec)
不要将
用作列别名。这是一个关键词,非常令人困惑,尤其是当使用as
关键词来定义别名时。是的,我现在改变了这一点。我一贴出我的问题就注意到了。谢谢。你的MySQL服务器版本是什么?这是一个窗口函数问题,因为我们正在尝试确定聚合值,而不将其分组为单行抱歉,我当时不在电脑旁,因此无法检查,但我现在回来了。版本:5.6.37-LOG能否请您为表格提供SHOW CREATE TABLE
语句。或者,您可以设置SQL FIDLE或DB FIDLE。这将使用会话变量来解决,它将需要相当多的测试,这使我接近我想要的。我用excel进一步过滤数据。
db.tblAccountStatus
+---------+--------+------------+------------+
| Account | Status | Eff From | Eff To |
+---------+--------+------------+------------+
| 12 | Active | 2018-08-02 | 2018-09-16 |
| 12 | Active | 2018-09-17 | 2018-09-28 |
| 12 | Active | 2018-09-29 | NULL |
| 15 | Active | 2018-09-07 | 2018-09-16 |
| 15 | Closed | 2018-09-17 | NULL |
| 17 | Active | 2016-04-28 | NULL |
| 19 | Active | 2015-05-05 | NULL |
+---------+--------+------------+------------+
SELECT
AA.Account,
II.InvDate,
ST.Description,
ST.Value,
ST.InvItem,
AA.EffFrom
FROM db.tblAccountStatus AA
INNER JOIN (
SELECT InvID, Account, MIN(InvDate) AS InvDate FROM db.tblInvoiceID
GROUP BY Account
) II ON II.Account = AA.Account
INNER JOIN db.tblInvoiceStatus ST ON ST.InvID = II.InvID
WHERE AA.Status = 'Active'
AND ST.Description LIKE '%Unlimited%'
GROUP BY ST.InvItem
+---------+------------+------------------+-------+---------+------------+
| Account | InvDate | Description | Value | InvItem | EffFrom |
+---------+------------+------------------+-------+---------+------------+
| 12 | 2018-08-14 | Unlimited (SV4) | 5.99 | 3056746 | 2018-08-02 |
| 12 | 2018-08-14 | Unlimited (SV4) | 5.99 | 3056748 | 2018-08-02 |
| 17 | 2018-09-15 | Unlimited (SV1) | 5.99 | 3186788 | 2016-04-28 |
| 15 | 2018-09-14 | Unlimited (GB2) | 7.99 | 3187748 | 2018-09-07 |
| 15 | 2018-09-14 | Unlimited (GB1) | 7.26 | 3187749 | 2018-09-07 |
+---------+------------+------------------+-------+---------+------------+
5 rows in set (0.00 sec)