2014-03-25 79 views
0

我有两个查询我试图加入到一起,所以我不必一个接一个地执行,因为在某些情况下我想更改输出顺序。MySQL获取最新日期从哪里依赖最新插入

第一个查询获取发票状态。它更改为保留日志,但99%的时间,我只需要检查最新的条目。布局是如下:

providers_invoice_status_ID,providers_invoice_summary_ID,STATUS_ID, userinfo_ID,providers_invoice_status_date

SELECT providers_invoice_summary_ID 
    FROM db_providers_invoice_status 
WHERE status_ID = '$status' 
ORDER BY providers_invoice_status_date DESC 

发票表格然后,基于上述查询的结果进行查询。它的布局如下。

providers_invoice_summary_ID,providers_invoice_summary_file,providers_invoice_summary_total,providers_invoice_summary_due,providers_invoice_summary_generated

SELECT si.providers_invoice_summary_ID 
    , providers_invoice_summary_file 
    , providers_invoice_summary_total 
    , providers_invoice_summary_due 
    , providers_invoice_summary_generated 
    FROM db_providers_invoice_summary si 
WHERE providers_invoice_summary_ID = '$invoice_ID'; 

月尝试合并查询,导致了这一点:

SELECT si.providers_invoice_summary_ID 
    , providers_invoice_summary_file 
    , providers_invoice_summary_total 
    , providers_invoice_summary_due 
    , providers_invoice_summary_generated 
    , s.status_ID 
    FROM db_providers_invoice_summary si, db_providers_invoice_status s 
WHERE status_ID = (SELECT status_ID 
        FROM db_providers_invoice_status 
        WHERE providers_invoice_summary_ID = si.providers_invoice_summary_ID 
        AND status_ID = 7 
        ORDER 
        BY providers_invoice_status_date DESC 
        LIMIT 1) 

然而,它拉一切从结果状态记录表,其中status_ID = 7,所以不太了解最新情况插入(状态可能已经更改为8,因此不需要invoice_ID)。我尝试过使用ORDER BY,但它只对所有结果排序,而不是我之后的子集。

对此的任何帮助将非常感激。希望这对读者来说是相当清楚的,我知道它非常复杂。

编辑数据:

发票表:

providers_invoice_summary_ID providers_invoice_summary_file providers_invoice_summary_total providers_invoice_summary_due providers_invoice_summary_generated 
---------------------------------------------------------------------------------------------------------------------------------------------------------- 
      4    |  ../blah/blah.jpg  |   245.63  |   2014-04-20    |   2014-03-14 
      5    |  ../blah/blah.jpg  |   456.89  |   2014-04-20    |   2014-03-12 
      6    |  ../blah/blah.jpg  |   125.36  |   2014-04-24    |   2014-03-12  

状态表:

providers_invoice_status_ID providers_invoice_summary_ID status_ID userinfo_ID providers_invoice_Status_date 
------------------------------------------------------------------------------------------------------------ 
       4   |    4    | 7  |  7 | 2014-03-14 10:19:41 
       5   |    5    | 7  |  7 | 2014-03-12 10:22:41 
       6   |    6    | 7  |  7 | 2014-03-24 10:15:38 
       7   |    5    | 8  |  7 | 2014-03-26 11:15:14 

我希望拿到2张发票出这个数据的,作为两个发票目前有他们的最新状态设置为7.希望这可以进一步澄清事情。

+0

如果是我,我会简化问题有点开始。 – Strawberry

+0

并学习正确的连接语法。隐式连接只会使查询更难理解。 –

+0

简化。能够帮助我吗? –

回答

0

这是两个查询的组合版本。我创建了一个子查询来选择状态与输入状态ID匹配的发票(例如7)。状态ID反过来从使用最新状态日期的子查询中获取。

更新的查询

SELECT 
si.providers_invoice_summary_ID 
, si.providers_invoice_summary_file 
, si.providers_invoice_summary_total 
, si.providers_invoice_summary_due 
, si.providers_invoice_summary_generated 
, invoice_status.status_ID 
FROM 
    db_providers_invoice_summary si, 
    (SELECT t1.providers_invoice_summary_ID as providers_invoice_summary_ID 
     , t1.status_id as status_id 
    FROM db_providers_invoice_status t1 
    LEFT JOIN db_providers_invoice_status t2 ON t1.providers_invoice_summary_ID = t2.providers_invoice_summary_ID AND t1.providers_invoice_Status_date < t2.providers_invoice_Status_date 
WHERE t2.providers_invoice_summary_ID IS NULL 
    AND t1.status_id = 7 
    ) invoice_status 
WHERE SI.PROVIDERS_INVOICE_SUMMARY_ID = invoice_status.PROVIDERS_INVOICE_SUMMARY_ID 

请查看sql fiddle的演示,以及。

参考

MySQL: The Rows Holding the Group-wise Maximum of a Certain Column

+0

很好的努力,但'where子句'中未知列'db_providers_invoice_status.priority' –

+0

谢谢!我忘记更改我用于测试的列名称。对不起。 –

+0

我希望理解正确的逻辑。如果我错了,请纠正。 –