簡體   English   中英

SQL Server 2008中列的不同值

[英]Distinct Value of a column in sql server 2008

您好,我使用左外部聯接進行了查詢,結果如下表所示:

| 00-00-00-00-00 | 1 | a.txt |
| 00-00-00-00-00 | 2 | b.txt |
| 00-00-00-00-00 | 1 | c.txt |
| 11-11-11-11-11 | 2 | d.txt |

我想要的是下面的MAC列的Distict值是SQL Fiddle,以便更好地理解。

SQLFIDDLE

謝謝

編輯

目的是2和3是無用或冗余的數據,其中1和4是有用的,這意味着1和4在MAC上顯示當前文件

輸出:

| 00-00-00-00-00 | 1 | a.txt |
| 11-11-11-11-11 | 2 | d.txt |

無法完全回答您的要求。 但是,通常表達您所問問題的人實際上是在問類似“我希望所有列作為僅包含不同MacAddress值的行的示例”之類的問題。 這個問題有很多答案,因為結果是不確定的。 一個簡單的解決方案是為每個MacAddress選擇第一行(無論“ first”的定義如何):

with cte as (
  select row_number() over (partition by MacAddress order by CounterNo) as rn, *
             from Heartbeats
  )
select * from cte where rn = 1;

如果只想獲得不同的macaddress,則可以執行以下操作:

SELECT DISTINCT macaddress FROM heartbeats

如果您希望所有列都與唯一的macaddress並排放置,則需要創建一條規則來獲取它們。 下面的查詢為您提供了每個macaddress具有最高ID的查詢:

SELECT t1.*
FROM heartbeats t1
LEFT JOIN heartbeats t2
    ON (t1.macaddress = t2.macaddress AND t1.id < t2.id)
WHERE t2.id IS NULL

sqlfiddle演示

編輯:

由於在原始查詢中使用的代碼沒有ID列,因此上述查詢被細化為:

with cte as (
select ROW_NUMBER() OVER(ORDER BY (Select 0)) AS ID,* from heartBeats
)


SELECT t1.*
FROM cte t1
LEFT JOIN cte t2
    ON (t1.macaddress = t2.macaddress AND t1.id < t2.id)
WHERE t2.id IS NULL

SQL小提琴

SELECT hb1.* FROM [heartbeats] as hb1
       LEFT OUTER JOIN [heartbeats] as hb2   
       ON (hb1.macaddress = hb2.macaddress AND hb1.id > hb2.id) 
         WHERE hb2.id IS NULL;

您必須忽略文件名。 參見http://sqlfiddle.com/#!3/a75e47/13

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM