2

以下のSQLの出力に重複する行を表示したくないので、そこに「distinct」がありますが、これは機能しません。次のような出力が得られます:

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

SQLServerの使用

4

5 に答える 5

10

Distinctはすべての列に適用されるため、集計関数を使用できます。

  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
于 2013-01-08T16:20:37.160 に答える
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
于 2013-01-08T16:18:56.570 に答える
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
于 2013-01-08T16:19:11.607 に答える
2

作成日をどのように処理するかを決める必要があります。たとえば、これらの日の最大値を表示します。Distinctは、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

これは機能しますが、作成日はありません

于 2013-01-08T16:19:21.593 に答える
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を表示します。

于 2013-01-08T16:19:02.860 に答える