我需要从一个表中检索所有行,其中2列组合在一起都是不同的。所以我想要所有的销售,没有任何其他销售发生在同一天,以相同的价格。基于日期和价格的唯一销售将更新为活动状态。
所以我在想:
UPDATE sales
SET status = 'ACTIVE'
WHERE id IN (SELECT DISTINCT (saleprice, saledate), id, count(id)
FROM sales
HAVING count = 1)
但我的脑部受伤了,走得更远。
发布于 2008-09-10 16:17:14
查询的问题在于,在使用GROUP BY子句(实际上是使用distinct)时,只能使用group by或聚合函数的列。您不能使用列id,因为可能存在不同的值。在您的例子中,由于HAVING子句的原因,总是只有一个值,但大多数RDBMS不够聪明,无法识别这一点。
然而,这应该可以工作(并且不需要连接):
UPDATE sales
SET status='ACTIVE'
WHERE id IN (
SELECT MIN(id) FROM sales
GROUP BY saleprice, saledate
HAVING COUNT(id) = 1
)
您也可以使用MAX或AVG而不是MIN,只有当只有一个匹配的行时,使用返回列的值的函数才很重要。
发布于 2018-01-13 15:56:09
我想从“GrondOfLucht”列中选择不同的值,但它们应该按照“排序”列中给出的顺序进行排序。我不能只获得一列的不同值。
Select distinct GrondOfLucht,sortering
from CorWijzeVanAanleg
order by sortering
它还会给列‘排序’,因为'GrondOfLucht‘和’排序‘不是唯一的,所以结果将是所有行。
使用该组按排序给出的顺序选择'GrondOfLucht‘的记录
SELECT GrondOfLucht
FROM dbo.CorWijzeVanAanleg
GROUP BY GrondOfLucht, sortering
ORDER BY MIN(sortering)
发布于 2019-01-31 16:52:10
如果您的DBMS不支持具有多列的distinct,如下所示:
select distinct(col1, col2) from table
通常可以安全地执行多选操作,如下所示:
select distinct * from (select col1, col2 from table ) as x
因为这可以在大多数DBMS上工作,并且预计这将比group by解决方案更快,因为您避免了分组功能。
https://stackoverflow.com/questions/54418
复制相似问题