0

特定のレポートの毎日の実行を格納するテーブルがあります。

DateAdded NodeId Field1Value Field1Threshold etc

NodeIdがレポートに存在していた日数をリストする新しい要件があります。したがって、DateAddedが次のようにリストされている場合

2013-03-01   <-- Run date
2013-02-28
2013-02-27
2013-02-26   <-- End of date sequence.  Return 4 days
2013-02-13
2013-01-07

これは、日付シーケンスの区切りを識別することでもあります

編集10:54私の時間これは私のspからの最初の提案のwhere句です

        t.etc,
        t.blah,
        CASE WHEN ras1.NodeId IS NULL THEN 'N' ELSE 'Y' END as AlertStat,
        fl.NodeId as fl_NodeId, 
        DATEDIFF(day, fl.LastDate, fl.FirstDate) as [DaysOn]
FROM    vwTrips t left join
        (
            select distinct nodeId 
            from    CustLogs.dbo.ReportAlertStats ras 
            where   ras.DateAdded between @RasStart and @RasEnd
        ) ras1 on  t.NodeId = ras1.NodeId left join
        (   SELECT NodeId, 
                    MIN(DateAdded) [FirstDate], 
                    MAX(DateAdded) [LastDate]
            FROM CustLogs.dbo.ReportAlertStats
            GROUP BY NodeId
            --ORDER BY NodeId, DateAdded
        ) fl on t.NodeId = fl.NodeId
WHERE   t.TripStart between @ReportStart and @ReportEnd
4

2 に答える 2

0
SELECT fl.NodeId, DATEDIFF(day, fl.FirstDate, fl.LastDate) [Days On] FROM
(SELECT NodeId, MIN(DateAdded) [FirstDate], MAX(DateAdded) [LastDate]
FROM DailyRuns
GROUP BY NodeId
) fl

一度だけ表示されるNodeIdの場合、最初と最後の表示が同じ日に発生した場合と同じ結果が表示されます。

SQLフィドル:http ://sqlfiddle.com/#!3/ea373 / 7

于 2013-02-28T23:26:21.753 に答える
0

これはあなたの質問に答えますか?

select nodeid, count(distinct dateAdded) as NumDays
from DailyRuns dr
group by nodeid
于 2013-03-01T01:41:01.743 に答える