我有一个数据库"Inventory",其中包含以下各列的食品:
索引|日期|类别|子类别|代码|说明|开始|结束
其中"日期"是接收到库存中的日期.我想 for each 唯一的类别和子类别 Select 记录,其中"Start"为空,日期是最早的.
我最初的try 是这样的:
SELECT MIN(date) as date, category, subcategory, description, code, inventory.index
FROM inventory
WHERE start is null
GROUP BY category, subcategory
它返回了我想要的每个唯一类别和子类别的记录,但有几个例外.如果添加的记录的日期较早(因此,它的索引高于日期较晚的记录),则查询将正确地返回该记录中的日期,但将返回其余列的另一个记录中的值,从而创建一个表中不存在的混合行.这就像"日期"值被连续判断并在必要时更新,但其他字段在将值加载到结果中后不会更改.我希望有人能帮我了解这里发生的事情.
我try 了其他几种方法:
How to select data where a field has a min value in MySQL?个
John Woo建议在WHERE子句中使用嵌套的SELECT子句.所以,我的看起来是这样的:
SELECT *
FROM inventory
WHERE
( SELECT MIN(date) FROM inventory )
AND
start is null
GROUP BY category, subcategory
AND运算符似乎有问题,这只计算"START IS NULL"条件,而忽略另一个条件,而不管我将它们放在哪个顺序中.当我删除其中一个条件时,另一个条件计算正确.
SQL query to select distinct row with minimum value个
Ken Clark建议使用内部联接,我将其修改为:
SELECT inv.*
FROM inventory inv
INNER JOIN
(
SELECT MIN(date) AS date, category, subcategory, description, code, inventory.index
FROM inventory
WHERE start is null
GROUP BY category, subcategory
) inv2
ON inv2.index = inv.index
WHERE inv2.date = inv.date
这种方法返回与我最初try 相同的结果,只是省略了有问题的行(我猜是因为在计算最后的WHERE子句时日期不同).
如果有任何建议,我可以在哪里了解这些案件中发生的事情,我将不胜感激.谢谢!