1

以下のクエリは、カウントが 1 より大きいすべてのレコードを返します。

TYPE DR を持つ、および/または PN が 91535 の場合、すべてのような ProdNo レコードを削除するクエリをさらに定義する必要があります。

例 137818 DR があるため、どちらのレコードも表示したくありません。
例 137763 91535 があるので、どちらのレコードも表示したくありません。

----------------------------------------------------------------------------
ProdNo  Type    PN  Timestamp
137818  DF  91020       2012-08-07 00:54:19.000
137818  DR  91020       2012-08-07 07:57:51.000
137764  DF  91020       2012-08-05 23:13:34.000
137764  DF  91020       2012-08-05 23:25:20.000
137763  DF  91020       2012-08-05 22:58:36.000
137763  DF  91535       2012-08-06 02:26:38.000
----------------------------------------------------------------------------

例 137764 DR も 91535 も無いので、1 件だけ表示させたい。

----------------Desired-Results---------------------------------------------
ProdNo  Type    PN  
137764  DF  91020
----------------------------------------------------------------------------

カウントに基づいて Prod レコードを検索するクエリ

declare @usetime datetime;
set @usetime =  ( dateadd( dd, -2, getdate() ))
SELECT ProdNo, Type, PN
  FROM [ProdStat].[dbo].[Prod]
  -- limit results to ProdNo's < 200000 for Products numbers up to 1999999 and > @usetime
  WHERE Timestamp > @usetime AND ProdNo < '200000' and ProdNo IN(
  select ProdNo
 FROM [ProdStat].[dbo].[Prod]
 group by ProdNo
 having (COUNT(ProdNo) >1)
 )
 order by ProdNo desc
4

2 に答える 2

1

This should do it for your example data:

declare @usetime datetime; 
set @usetime =  ( dateadd( dd, -2, getdate() )) 
SELECT ProdNo, Type, PN 
  FROM [ProdStat].[dbo].[Prod] 
  -- limit results to ProdNo's < 200000 for Products numbers up to 1999999 and > @usetime 
  WHERE Timestamp > @usetime AND ProdNo < '200000' and ProdNo IN( 
     select ProdNo 
     FROM [ProdStat].[dbo].[Prod]
      group by ProdNo 
      having (COUNT(ProdNo) >1) 
  ) 
  AND ProdNo NOT IN (
     SELECT ProdNo FROM [ProdStat].dbo.Prod WHERE Type = 'DR' OR PN = 91535
  )
  order by ProdNo desc
于 2012-08-07T15:05:27.620 に答える
0

比較的簡単な方法は次のとおりです。

declare @usetime datetime;
set @usetime =  ( dateadd( dd, -2, getdate() ))
SELECT ProdNo, Type, PN
FROM [ProdStat].[dbo].[Prod]
-- limit results to ProdNo's < 200000 for Products numbers up to 1999999 and > @usetime
WHERE Timestamp > @usetime AND ProdNo < '200000' and
      ProdNo IN (select ProdNo
                 FROM [ProdStat].[dbo].[Prod]
                 group by ProdNo
                 having COUNT(ProdNo) >1) and
                        max(case when type = 'DR' then 1 else 0 end) = 0 and
                        max(case when PN = 91535 then 1 else 0 end) = 0
                )
order by ProdNo desc
于 2012-08-07T15:14:26.483 に答える