![](/img/trans.png)
[英]SQL server 2008 R2, select one value of a column for each distinct value of another column
[英]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,以便更好地理解。
謝謝
編輯
目的是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
編輯:
由於在原始查詢中使用的代碼沒有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
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.