【发布时间】:2014-07-10 12:49:03
【问题描述】:
这是我正在尝试转换的当前查询,它需要一个项目 ID,然后接收具有最新日期和类型不等于 TRAN 的相应价格/数量/供应商 ID。
SELECT cs_po_products.price, cs_po_products.qty, cs_po.vendor_id
FROM cs_po_products, cs_po
WHERE cs_po_products.stock_number = :items_id
AND cs_po_products.po_number = cs_po.id
AND type !='TRAN'
ORDER BY cs_po.date_ordered DESC
LIMIT 1
这个查询工作正常,但是它必须执行很多次,这使得加载页面有点慢。我正在尝试创建一个查询,该查询将为每个 stock_number 获取最新 date_ordered 的 ROW。在寻找答案时,我遇到了很多技术,但最常见的是两个表的 JOIN,其中 MAX() 为 date_ordered。但唉,我似乎无法提出正确的查询。
这是众多尝试之一,但我认为是最接近的。
SELECT a.price, a.qty, b.vendor_id, a.stock_number, b.max, b.type
FROM cs_po_products a
LEFT JOIN (SELECT MAX(date_ordered)as max,vendor_id,type, date_ordered,id FROM cs_po) b
ON b.id = a.po_number
WHERE stock_number != '' AND date_ordered IS NOT NULL
AND type !='TRAN'
ORDER BY stock_number, date_ordered DESC
如果有人能指出我正确的方向,在此先感谢
编辑:
所有提供的答案仍然给出不止一行的股票编号,例如:
price qty vendor_id stock_number date_ordered
0.05446 123750 51 00010005.01S 2014-02-24 15:29:00
0.05446 123750 51 00010005.01S 2014-01-02 14:25:00
0.05446 123750 51 00010005.01S 2013-11-04 13:48:00
0.05402 123750 51 00010005.01S 2013-08-20 10:02:00
0.0532 123750 51 00010005.01S 2013-07-12 09:21:00
0.0538 123750 51 00010005.01S 2013-04-02 12:15:00
0.0532 123750 51 00010005.01S 2012-12-27 00:00:00
0.0555 101750 51 00010005.01S 2012-11-07 10:55:00
0.555 137500 51 00010005.01S 2012-11-02 09:39:00
0.0532 137500 51 00010005.01S 2012-11-02 09:37:00
0.0532 123750 51 00010005.01S 2012-10-03 00:00:00
我想要在这个结果中唯一的行是第一行,因为它有最近的日期,但在实际结果中有更多的 stock_numbers 低于我想要那些相应的最大日期
【问题讨论】:
-
是的,但是我认为由于使用 2 个表而不是 1 个表,我可能会遇到麻烦
标签: mysql