简体   繁体   English

如何选择仅查看SQL Server中一列的唯一值?

[英]How to select unique values looking at only one column in SQL Server?

I use the following query (in SQL Server 2008) to fetch the last 20 records from a table. 我使用以下查询(在SQL Server 2008中)从表中获取最后20条记录。

The query works as intended, my only problem is that this is a log table where a certain itemID can appear several times. 该查询按预期工作,我唯一的问题是这是一个日志表,其中某个itemID可以出现几次。 Is there a way that I can only select unique itemIDs here? 有没有办法我只能在这里选择唯一的itemID?

I tried using DISTINCT but this doesn't work here as not the whole rows are duplicates, just the itemID can appear multiple times (and then the time stamps or other data differ). 我尝试使用DISTINCT,但这在这里不起作用,因为不是整个行都是重复的,只是itemID可以出现多次(然后时间戳或其他数据不同)。

My SQL: 我的SQL:

ALTER PROCEDURE [dbo].[RC_FetchUpdates]
    @departmentID int
AS
BEGIN
    SET NOCOUNT ON;

    SELECT      TOP 20 A.itemID,
                A.lastUpdate,
                CONVERT(VARCHAR(11), A.modTime, 106) AS modTime,
                A.modBy,
                B.itemName,
                B.linkRef
    FROM        RC_LogLinks A
    LEFT JOIN   RC_Links B
    ON          B.itemID = A.itemID
    WHERE       B.departmentID = @departmentID
    AND         A.lastUpdate <> 'Deleted'
    ORDER BY    A.modTime desc, B.itemName
    FOR XML PATH('updates'), ELEMENTS, TYPE, ROOT('ranks')

END

It will be something like this: 将会是这样的:

WITH rankedLogLinks AS (
    SELECT ROW_NUMBER() OVER (PARTITION BY A.itemID ORDER BY A.modTime DESC) AS rownum, A.itemID, A.lastUpdate, A.modTime, A.modBy
    FROM RC_LogLinks A
    WHERE A.lastUpdate <> 'Deleted'
)
SELECT  r.itemID, r.lastUpdate, CONVERT(VARCHAR(11), r.modTime, 106) AS modTime, r.modBy, B.itemName, B.linkRef
FROM rankedLogLinks r
    LEFT JOIN   RC_Links B
       ON B.itemID = r.itemID
    WHERE B.departmentID = @departmentID
       AND r.rownum = 1
    ORDER BY B.itemName
    FOR XML PATH('updates'), ELEMENTS, TYPE, ROOT('ranks')
;

You might want to change the location of WHERE A.lastUpdate <> 'Deleted' from the first query to the second depending on your requirement. 您可能需要根据需要将WHERE A.lastUpdate <>“已删除”的位置从第一个查询更改为第二个查询。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 SQL 服务器查询,其中 distinct 不起作用 - 到 select 仅唯一记录 - 并且只查看一列的唯一性 - SQL Server query where distinct won't work - to select only unique records - and looking only at one column for uniqueness 仅在一列中选择具有唯一值的值对(SQL) - Select pairs of values with unique value in one column only (SQL) SQL仅在列中选择唯一值 - SQL Select only unique values in column SQL 按一列选择唯一值,按另一列选择最新值 - SQL Select unique values by one column with the latest value by another column 选择一列的值到一行 - SQL Server - Select values of a column into one row - SQL Server MySQL:选择N行,但在一列中仅包含唯一值 - MySQL: Select N rows, but with only unique values in one column SQL在1列中选择唯一值 - SQL Select unique values in 1 column 选择多个值作为一列,而不是每个值的列,SQL Server - Select many values as one column, not a column for each value, SQL Server 如何使用sql为列的每个唯一值仅选择第一行 - How to select only the first rows for each unique value of a column with sql 在标准SQL中,如何选择行,以便对于一列中的每个唯一值,另一列中的所有值都是指定值? - In standard SQL, how do I select rows such that for each unique value in one column, all of the values in another column are a specified value?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM