如何获得唯一的行结果

时间:2016-03-24 17:11:47

标签: sql sql-server database

我有复杂的连接查询,

Select a.date, b.Name, d.description
 FROM tableA  as a
 INNER JOIN (SELECT Name, MAX(Time) as lastSentTime FROM tableA 
 GROUP BY Name) b ON a.Name = omh.Name AND b.lastSentTime = b.setTime
 INNER JOIN tableD as d ON d.Id = a.id 
 INNER JOIN tableE as e ON e.Id = d.id
 INNER JOIN tableF as f ON f.Id = a.id
 WHERE a.status = 'FAILED' AND a.Class = 'Secondary' AND a.marks = e.marks 

将以

的形式返回数据
Date    Name    Discription 
1/2/16  Test    I am testing
1/2/16  Test    I am testing
1/2/16  Test1   I am testing1
1/2/16  Test1   I am testing1

我需要结果

 Date    Name    Discription 
1/2/16  Test     I am testing
1/2/16  Test1    I am testing1

2 个答案:

答案 0 :(得分:0)

尝试DISTINCT

Select DISTINCT a.date, b.Name, d.description
 FROM tableA  as a
 INNER JOIN (SELECT Name, MAX(Time) as lastSentTime FROM tableA 
 GROUP BY Name) b ON a.Name = omh.Name AND b.lastSentTime = b.setTime
 INNER JOIN tableD as d ON d.Id = a.id 
 INNER JOIN tableE as e ON e.Id = d.id
 INNER JOIN tableF as f ON f.Id = a.id
 WHERE a.status = 'FAILED' AND a.Class = 'Secondary' AND a.marks = e.marks 

答案 1 :(得分:0)

也许你需要一种完全不同的方法。加入子查询似乎很奇怪。另外一个连接谓词就在那里where子句而不是连接。

with SortedResults as
(
    Select a.date
        , b.Name
        , d.description
        , ROW_NUMBER() over(partition by b.Name order by a.date desc) as RowNum
    FROM tableA  as a
    INNER JOIN tableD as d ON d.Id = a.id 
    INNER JOIN tableE as e ON e.Id = d.id AND a.marks = e.marks 
    INNER JOIN tableF as f ON f.Id = a.id
    WHERE a.status = 'FAILED' 
        AND a.Class = 'Secondary' 
)

select date
    , Name
    , description
from SortedResults
where RowNum = 1