繁体   English   中英

MySQL获取最新日期,相关的最新插入

[英]MySQL Get latest date where dependant latest insert

我有两个要合并在一起的查询,因此不必一个接一个地执行,因为在某些情况下,我想更改输出顺序。

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

provider_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

然后根据上述查询的结果查询发票表。 布局如下。

provider_invoice_summary_ID,providers_invoice_summary_file,providers_invoice_summary_total,providers_invoice_summary_due,providers_invoice_summary_genic

    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张发票,因为目前有2张发票的最新状态设置为7张。希望这可以进一步澄清。

这是两个查询的组合版本。 我创建了一个子查询来选择状态与输入状态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小提琴以获取演示。

参考文献

MySQL:行包含某个列的分组最大值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM