Kas*_*hif 34 sql t-sql sql-server-2005
我需要从下面给出的表中的每个重复记录集中取出最上面的第一行.我需要在视图中使用此查询
请没有临时表,因为我已经通过添加标识列和最小功能和分组来完成它.我需要没有临时表或表变量的解决方案
这只是示例数据.原始表中有1000个记录,我只需要前1000个的结果,所以不能使用distinct
我正在使用SQL Server 2005
alt text http://img686.imageshack.us/img686/42/duplicate.png
谢谢.
HGM*_*aci 13
查找已订购1次或更多次的所有产品......(重复记录种类)
SELECT DISTINCT * from [order_items] where productid in
(SELECT productid
FROM [order_items]
group by productid
having COUNT(*)>0)
order by productid
Run Code Online (Sandbox Code Playgroud)
要选择最后插入的那些......
SELECT DISTINCT productid, MAX(id) OVER (PARTITION BY productid) AS LastRowId from [order_items] where productid in
(SELECT productid
FROM [order_items]
group by productid
having COUNT(*)>0)
order by productid
Run Code Online (Sandbox Code Playgroud)
答案取决于具体的"前1000个不同"记录的含义.
如果您的意思是要返回最多1000条不同的记录,无论表中有多少重复记录,请写下:
SELECT DISTINCT TOP 1000 id, uname, tel
FROM Users
ORDER BY <sort_columns>
Run Code Online (Sandbox Code Playgroud)
如果您只想搜索表中的前1000行,并且可能返回少于1000个不同的行,那么您可以使用子查询或CTE编写它,如下所示:
SELECT DISTINCT *
FROM
(
SELECT TOP 1000 id, uname, tel
FROM Users
ORDER BY <sort_columns>
) u
Run Code Online (Sandbox Code Playgroud)
该ORDER BY
如果选购你不关心当然是哪些记录你回来.
有时您可以像这样使用CROSS APPLY运算符:
select distinct result.* from data d
cross apply (select top 1 * from data where data.Id = d.Id) result
Run Code Online (Sandbox Code Playgroud)
在这个查询中,我只需要选择自然碰巧在我的数据中出现的许多重复项中的第一个.它适用于SQL Server 2005+数据库.