0

これが私の質問です:

SELECT DISTINCT TOP 500 
bk.firstname,
bk.surname,
bk.email,
county.region_id,
inspection.inspection_date

FROM
bken bk
LEFT OUTER JOIN county
  ON bk.county = county.code
LEFT OUTER JOIN inspection
  ON bk.inspid = inspection.inspid

WHERE
bk.firstname IS NOT NULL
AND bk.surname IS NOT NULL
AND bk.email IS NOT NULL
AND county.region_id IS NOT NULL
AND  county.region_id <> 10  
AND inspection_date > '04/01/2012 00:00:00.000'
AND inspection_date < '10/01/2012 00:00:00.000'

私の目標は、500人の異なる人々のサンプルを取得することです。

残念ながら、これは重複した名前を返します(ただし、検査日は異なります)。そのため、別の名前を選択して、問題が解決するかどうかを確認しようとしています。誰かが私がこれをするのを手伝ってもらえますか?

Microsoft SQLServer2008を使用しています。

4

2 に答える 2

2

使用group by

SELECT TOP 500 
bk.firstname,
bk.surname,
bk.email,
county.region_id,
max(inspection.inspection_date)

FROM
bken bk
LEFT OUTER JOIN county
  ON bk.county = county.code
LEFT OUTER JOIN inspection
  ON bk.inspid = inspection.inspid

WHERE
bk.firstname IS NOT NULL
AND bk.surname IS NOT NULL
AND bk.email IS NOT NULL
AND county.region_id IS NOT NULL
AND  county.region_id <> 10  
AND inspection_date > '04/01/2012 00:00:00.000'
AND inspection_date < '10/01/2012 00:00:00.000'
GROUP BY 
bk.firstname,
bk.surname,
bk.email,
county.region_id
于 2012-10-17T09:42:05.673 に答える
1

以下のようにせずに、inspection.inspection_dateあちこちの例minで集計関数を使用する必要があります。group bydistinct

SELECT TOP 500 
bk.firstname,
bk.surname,
bk.email,
county.region_id,
min(inspection.inspection_date) as inspection_date    
FROM
bken bk
LEFT OUTER JOIN county
  ON bk.county = county.code
LEFT OUTER JOIN inspection
  ON bk.inspid = inspection.inspid

WHERE
bk.firstname IS NOT NULL
AND bk.surname IS NOT NULL
AND bk.email IS NOT NULL
AND county.region_id IS NOT NULL
AND  county.region_id <> 10  
AND inspection_date > '04/01/2012 00:00:00.000'
AND inspection_date < '10/01/2012 00:00:00.000'
group by bk.firstname,
         bk.surname,
         bk.email,
         county.region_id
于 2012-10-17T09:43:10.927 に答える