【问题标题】:Left Join to get previous record sqlLeft Join 获取上一条记录 sql
【发布时间】:2016-02-11 21:59:09
【问题描述】:

所以我正在开发一个系统,以便在商店检查之前进行最佳管理,当您在检查概览页面上时,您会看到下表

Productgroup -> Productname -> Barcode -> Checked -> Checked Time -> New best before -> Old best before

在使用此查询之前,我设法收集了所有数据,但最好是旧的:

SELECT `thtchecksproducts`.*, productName, productGroup, productBarcode FROM `thtchecksproducts`
LEFT JOIN `products` ON thtchecksproducts.productID = products.productID 
WHERE `checkID`=:checkID ORDER BY checked DESC, productGroup ASC, productName ASC

现在我需要它与 FROM 表 thtchecksproducts 进行另一个左连接。它需要像最后一个一样加入 productID,但只需要与此查询匹配的最后一条记录:

SELECT productID, max(id) FROM thtchecksproducts WHERE checkID IN (SELECT checkID FROM thtchecks WHERE userID=:userID AND closed=1 AND checkID IS NOT :checkID)

我想出了这个:

SELECT s1.*, productName, productGroup, productBarcode FROM `thtchecksproducts` s1
LEFT JOIN `products` ON thtchecksproducts.productID = products.productID
LEFT JOIN thtchecksproducts s2 ON s1.productID = s2.productID
AND s1.id = (SELECT productID, max(id) FROM thtchecksproducts 
WHERE checkID IN (SELECT checkID FROM thtchecks WHERE userID=:userID AND closed=1 AND checkID IS NOT :checkID) AND productID = s1.productID)


WHERE `checkID`=:checkID ORDER BY checked DESC, productGroup ASC, productName ASC

谁能帮我完成这个工作?

【问题讨论】:

    标签: php mysql sql pdo left-join


    【解决方案1】:

    史蒂芬: 您需要在问题和业务逻辑中提供所有表的列。 什么规则描述了“旧的最佳日期”? “New Best Before date”是否总是大于 sysdate?此外,确定“旧的最佳使用日期”的查询是否总是在“新的最佳使用日期”提交之前触发?

    CK。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多