Postgres SQL:
select distinct on(email_addr) *
from table1
order by email_addr, created_date desc;
结果-70个不同值;所有行数据。
SQL Server等效项:
select distinct(email_addr), id, first_name, last_name, created_date
from table1
order by email_addr, created_date desc;
结果-160个值;重复的值。
我需要得到正确的SQL查询的帮助。
1条答案
按热度按时间nzk0hqpo1#
DISTINCT ON
是一个在其他数据库中找不到的自定义PostgreSQL特性。一种更标准的方法是使用
ROW_NUMBER() OVER(PARTITION BY Email_Addr ORDER BY Created_Date) as RN
,只保留RN=1的行。您必须使用CTE,因为OVER
不能在WHERE子句中使用。这应该在支持CTE和
ROW_NUMBER()
的所有数据库上运行。这包括MySQL 8和更高版本。但是性能可能会受到影响,因为需要对原始结果集的所有行计算ROW_NUMBER。这个查询在PostgreSQL中可能也很慢,因为在选择第一个结果之前,需要收集、分区和排序结果。