Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询从指定之外的另一行提取数据_Mysql - Fatal编程技术网

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';