0
WITH x AS 
(
  SELECT *, 
    rn = ROW_NUMBER() OVER (PARTITION BY PersonRFID ORDER BY DateStamp)
  FROM AISDb
where action = 'IN'
) ,
y As
(
  SELECT *, 
    rna = ROW_NUMBER() OVER (PARTITION BY PersonRFID ORDER BY DateStamp)
  FROM AISDb
where action='OUT'
) 

SELECT y.ID,x.ID,x.PersonName,y.PersonName,x.PersonRFID, DATEDIFF(MINUTE, x.TimeStamp, y.TimeStamp) 
FROM x , y      
where x.PersonRFID = y.PersonRFID
And x.rn=y.rna
AND  cast(x.Datestamp as date) = cast(y.Datestamp as date)
Order By x.PersonName;

上記のクエリを実行すると、次の表が表示されます。

   Datestamp         personName                     ID             TimeDifference

    1/30/2013   Aman Ullah Khan     E2001026770D01432810029D            11
    1/30/2013   Aman Ullah Khan     E2001026770D01432810029D            0
    1/30/2013   Aman Ullah Khan     E2001026770D01432810029D            1
    1/30/2013   Amjad Ali Anjum     E2001026770D024125401476            0
    1/30/2013   Amjad Ali Anjum     E2001026770D024125401476            1
    2/9/2013    Amjad Ali Anjum     E2001026770D024125401476            31
    2/10/2013   Amjad Ali Anjum     E2001026770D024125401476            3
    2/10/2013   Amjad Ali Anjum     E2001026770D024125401476            0
    2/10/2013   Amjad Ali Anjum     E2001026770D024125401476            3 
    1/30/2013   Arif Shah           E2001026770D01852370206D            0
    3/13/2013   Asmat Ullah         E2001026770D007624101DA1          456
    3/20/2013   Asmat Ullah         E2001026770D007624101DA1          558

たとえば、人名「amanullah khan」については、同じ日付、つまり 2013 年 1 月 30 日のレコードが 3 つありますが、日付が同じで取得する必要がある場合は、「時差」を合計する単一のレコードが必要です。

 1/30/2013   Aman Ullah Khan     E2001026770D01432810029D            14
4

2 に答える 2

1

これを試してみてください -

SELECT  y.ID ,
            x.ID ,
            x.PersonName ,
            y.PersonName ,
            x.PersonRFID ,
            SUM(DATEDIFF(MINUTE, x.TimeStamp, y.TimeStamp))
    FROM x
    JOIN y ON x.PersonRFID = y.PersonRFID
            AND x.rn = y.rna
            AND CAST(x.Datestamp AS DATE) = CAST(y.Datestamp AS DATE)
    GROUP BY y.ID ,
            x.ID ,
            x.PersonName ,
            y.PersonName ,
            x.PersonRFID
    ORDER BY x.PersonName
于 2013-04-12T08:24:30.287 に答える
0

次のように変更する必要があります

 SELECT y.ID,x.ID,x.PersonName,y.PersonName,x.PersonRFID,sum(DATEDIFF(MINUTE, x.TimeStamp, y.TimeStamp))
FROM x , y      
where x.PersonRFID = y.PersonRFID
And x.rn=y.rna
AND  cast(x.Datestamp as date) = cast(y.Datestamp as date)
group by
y.ID,x.ID,x.PersonName,y.PersonName,x.PersonRFID
Order By x.PersonName;
于 2013-04-12T08:22:35.687 に答える