MySQL查询从指定之外的另一行提取数据
我试图编写一个查询,从给定的MySQL查询从指定之外的另一行提取数据,mysql,Mysql,我试图编写一个查询,从给定的searchId中提取每个companyId的listNumber的最低数量,其中日期比指定日期新。因此,我将为每个公司获得一行,其中包含该公司所有条目中最低的listNumber行的数据 (简化的)MySQL表如下所示: id (PK) companyId (int) searchId (int) productName (varchar) effective (decimal) listNumber (int) add
searchId
中提取每个companyId
的listNumber
的最低数量,其中日期比指定日期新。因此,我将为每个公司获得一行,其中包含该公司所有条目中最低的listNumber
行的数据
(简化的)MySQL表如下所示:
id (PK)
companyId (int)
searchId (int)
productName (varchar)
effective (decimal)
listNumber (int)
addedWhen (timestamp)
但是没有运气,因为这将返回最低的列表编号
,但所有其他数据将从另一行中获取,并具有相同的公司ID
关于如何正确处理此查询,您有什么想法吗?您可以试试
... HAVING Something = MIN(Something)
select listnumber,bankid,productname, effective
from dummytablename
left join (SELECT MIN(listNumber) AS listnumber, bankId
FROM DummyTableName
WHERE addedWhen >= '2011-04-05 00:00:00'
AND searchId='26' group by bankid) as t where dummytablename.listnumber=t.listnumber and dummytablename.bankid=t.bankid
但是它有点难看(我肯定我用了一个比这个更好的解决方案)如果你按聚合函数字段以外的所有内容分组,它应该会工作。在这种情况下,只有当您获取字段的计数或总和并希望显示该计数/总和时,才需要
SELECT MIN(listNumber) AS listnumber, bankId, productName, effective
FROM DummyTableName
WHERE addedWhen >= '2011-04-05 00:00:00'
AND searchId='26'
GROUP BY bankId, productName, effective
什么是银行ID?也许你是说公司对不起,我弄错了。是的,bankId是companyId,现在更正它如果你不知道它是什么,你怎么知道解决方案很简单?o、 哦,这样的陈述让我困惑。@Tomalak呵呵,好吧,让我重新表述一下;)我觉得这很简单,但也可能是有史以来最复杂的事情
SELECT MIN(listNumber) AS listnumber, bankId, productName, effective
FROM DummyTableName
WHERE addedWhen >= '2011-04-05 00:00:00'
AND searchId='26'
GROUP BY bankId, productName, effective
SELECT t1.* FROM table t1
JOIN (SELECT companyId, MIN(listNumber) min_listNumber FROM table
WHERE addedWhen >= '2011-04-05 00:00:00' AND searchId='26'
GROUP BY companyId) t2
ON t1.companyId = t2.companyId AND t1.listnumber = t2.min_listnumber
WHERE t1.addedWhen >= '2011-04-05 00:00:00' AND t1.searchId='26';