Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL,像stations和最早的日期问题一样计数_Mysql_Mysql Workbench - Fatal编程技术网

MySQL,像stations和最早的日期问题一样计数

MySQL,像stations和最早的日期问题一样计数,mysql,mysql-workbench,Mysql,Mysql Workbench,对于MySQL来说是相当陌生的,我对如何构建以下查询有点迷茫 下表显示了我希望我的预期输出是什么样的 +---------+------------+-----------------+-------+----------+------------+ | Account | Inv Date | Description | Value | Inv Item | Eff From | +---------+------------+-----------------+-------

对于MySQL来说是相当陌生的,我对如何构建以下查询有点迷茫

下表显示了我希望我的预期输出是什么样的

+---------+------------+-----------------+-------+----------+------------+
| 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)