我正在研究一个最好的日期检查系统之前的php / mysql,并且在创建一个新的检查时,我需要系统通过查找最近的关闭检查找到某个产品的最佳日期
我正在使用几张表来完成这项工作:
bbcheckProducts
ID checkID productID checked bestBefore
1 1 1 1 2015-05-06
2 2 1 1 2016-07-22
3 3 1 1 2016-09-16
bbChecks
checkID userID closed
1 1 1
2 2 1
3 1 1
因此,当我在上图中的表格上运行此查询时:
SELECT ID,
MAX(checkID) AS maxCheck,
bestBefore
FROM bbcheckProducts
WHERE checkID IN
(
SELECT checkID
FROM bbChecks
WHERE userID = 1
AND closed = 1
)
AND checked = 1
GROUP BY productID
ORDER BY bestbefore ASC
它会返回如下内容:
ID = 1
maxCheck = 3
bestBefore = 2015-05-06
所以它确实需要max checkID,但其他值仍然等于productID的第一次出现。我希望它采用与最大ID一起的值,因此结果将如下所示:
ID=3
maxCheck = 3
bestBefore = 2016-09-16
那么如何让我的查询像这样工作呢?
注意:有多种产品,因此产品1可能在支票1和3中,而产品2只在1中,因此它必须从支票1中获取产品2的数据,从支票3中获取产品1的数据
答案 0 :(得分:0)
您需要在第二个表上使用max函数,例如此查询
select * from table_name where some_colomn = 'some_value' and some_colomn
in (select max(some_colomn) from table_name2 where some_col = 'some_value' group by some_colomn)
答案 1 :(得分:-1)
您可以加入表格,以获得check_ID
表中存在bbChecks
的所有记录的简化集。
然后,您可以在简化集上运行max(CheckID)
- 选择。
在你的情况下,这就像是:
SELECT ID, max(checkID), bestBefore
FROM bbcheckProducts p
INNER JOIN bbChecks c ON (p.checkID = c.checkID)
WHERE UserID = 1
AND closed = 1
AND checked = 1
这首先返回你带有checkIDs 1和3的记录。然后你选择max(checkID),所以它会返回checkID 3.