2013-01-08 42 views
1

我想不是显示重复的行在输出中的sql下面,所以我有'独特'在那里,但是这是行不通的。我得到这样的输出:SQL:不显示重复

PermitNumber PermitName CreatedOn 
111   ABCD  1/2/2011 
111   ABCD  3/4/2012 
222   DFES  3/6/2000 

,我想只有一排与111,但我获得超过1行,因为111有一个以上的修改,但我不在乎,如果它有1个或1000

select distinct (dbo.PermitNumber(mp.PermitId)), 
     dbo.PermitName(mp.PermitId), 
    mod.[CreatedOn] as [CreatedOn] 
from tblPermit mp, dbo.[tblModification] mod 
where mod.PermitId = mp.PermitId 
order by 1 

使用SQL Server

+0

“不同”不适只是一个单一的列,但到在select子句中指定的所有列。在你的情况下,CreatedOn与PermitNumber 111的两行不同。因此,两行都出现在输出中。如果两个行的CreatedOn相同,那么在PermitNumber 111的输出中只会出现1行。 –

+0

'dbo.'对我来说看起来像是sql server –

+0

第一件事是第一件事。如果你不关心它,为什么选择created_on?同样如前所述,“distinct”适用于查询的所有列的集合,因此它不关心您的括号 – beder

回答

7

鲜明适用于所有列,所以你可以使用一个聚合函数:

select mp.PermitNumber, 
    mp.PermitName, 
    max(mod.[CreatedOn])as [CreatedOn] 
    from tblPermit mp 
    Inner join dbo.[tblModification] mod 
     on mod.PermitId = mp.PermitId 
    Group by mp.PermitNumber, 
    mp.PermitName 
    order by 1 
+0

谢谢,就是这样。 – numberwang

+0

这就是@numberwang! –

2

使用GROUP BY(取决于您的DBMS确切语法):

select (dbo.PermitNumber(mp.PermitId)), 
    dbo.PermitName(mp.PermitId), 
min(mod.[CreatedOn] as [CreatedOn]) 
from tblPermit mp, dbo.[tblModification] mod 
where mod.PermitId = mp.PermitId 
group by (dbo.PermitNumber(mp.PermitId)), dbo.PermitName(mp.PermitId) 
order by 1 
1

基于问题的尝试有限的信息:

select distinct (dbo.PermitNumber(mp.PermitId)), 
     dbo.PermitName(mp.PermitId), 
    MIN(mod.[CreatedOn]) as [CreatedOn] 
    --^^^new 
from tblPermit mp, dbo.[tblModification] mod 
where mod.PermitId = mp.PermitId 
group by (dbo.PermitNumber(mp.PermitId)), ---<<new 
     dbo.PermitName(mp.PermitId),  ---<<new 
order by 1 

你需要做的所有的每一行的mod.[CreatedOn])值的东西,所以他们一起组和显示每个MIN。

2
;WITH latestRecord 
AS 
(
    SELECT PermitNumber, PermitName, CreatedOn, 
      ROW_NUMBER() OVER (PARTITION BY PermitNumber, PermitName 
           ORDER BY CreatedOn DESC) rn 
    FROM tblPermit 
) 
SELECT PermitNumber, PermitName, CreatedOn 
FROM latestRecord 
WHERE rn = 1 
+0

[这只是有用或辉煌](http://meta.stackexchange.com/questions/148066/can-i-搜索 - 我 - 评论 - 使用 - 一些的关键字)?在追求一个伟大的功能:) – bonCodigo

2

比你应该决定如何处理创建日期。例如,以显示这些天的最大值。 区别应用于select子句中的所有字段。

select distinct (dbo.PermitNumber(mp.PermitId)), 
     dbo.PermitName(mp.PermitId) 
from tblPermit mp, dbo.[tblModification] mod 
where mod.PermitId = mp.PermitId 
order by 1 

这会工作,但没有创建日期