-1

食堂タイプのデータベース システムを使用しており、ストアド プロシージャを開発しようとしています。

empcode  time            date                  item
------------------------------------------------------------- 
005153  08:45:03    05/10/2012 12:00:00 AM    BREAKFAST  ****
005153  08:45:04    05/10/2012 12:00:00 AM    BREAKFAST  ****
005153  13:48:47    05/10/2012 12:00:00 AM    LUNCH
005153  17:40:33    05/10/2012 12:00:00 AM    BREAKFAST

マークされたレコードは、関心のある領域です。その中から1枚だけ選びたい。これは、タイムスロットに関して行う必要があります。数人の従業員がいて、それぞれが朝食の時間帯が異なります。選択された従業員には、朝食の時間枠が 2 つあります。したがって、1 つのタイム スロットから 1 つを別のタイム スロットから選択する必要があります。

出力は次のようになります。

empcode  time            date                  item
------------------------------------------------------------- 
005153  08:45:03    05/10/2012 12:00:00 AM    BREAKFAST  
005153  13:48:47    05/10/2012 12:00:00 AM    LUNCH
005153  17:40:33    05/10/2012 12:00:00 AM    BREAKFAST
4

2 に答える 2

1

これを試して :-

With cte as 
(
Select *,
row_number() over (partition by datepart(minute,[time]),[date] order by empcode ) rn
from Employee
)
Select * from cte where rn=1 order by [time]

SQL FIDDLEでのデモ

于 2013-03-29T06:27:46.830 に答える
0

SQL FIDDLE DEMO

基本的に、重複している可能性のあるレコードを見つけて、そのうちの 1 つを選択する必要があります。ランクオーバーを使用できます。あなたのケースでは、dup の以前のレコードを出力として選択する場合は、[日付] と [項目]の順序で分割し、デフォルトの昇順を使用するか、DESC を使用します。


WITH cte 
AS
(
   SELECT *,
          rank() over (partition BY Date,Item ORDER BY time ) rn
   FROM Employee
)
SELECT [empcode],[time],[date],[item]
FROM cte WHERE rn=1
ORDER BY [date],[time]
于 2013-03-29T07:01:34.360 に答える