簡體   English   中英

SQL查詢按條件按周計數

[英]SQL query count by week with criteria

我必須按星期編寫數據庫中腳手架數量的趨勢報告。 在下面的示例中,我可以獲得按周豎起的腳手架數量,也可以使用相同的查詢將其拆除,但這不是我所需要的。

SELECT COUNT(scaffID) Erected, WeekStart
FROM 
(
 SELECT ScaffID, 
        dateadd(week, datediff(day,0,Erected) / 7, 0) AS WeekStart  
 FROM Scaffolds
) o
GROUP BY WeekStart

我可以通過指定日期從中獲得站立式腳手架,但我希望每個星期五都說站立式腳手架。

Declare @staticDate As DateTime
Set @staticDate = '2/1/2015'

Select COUNT(scaffID) As StandingScaffolds
from RequestInfo 
Where (    ErectDate<= @staticDate )
  And (    DismantleDate>= @staticDate
        or DismantleDate Is NULL
      )

這讓我發瘋,所以我們將不勝感激。

菲爾

這應該給您一些開始。

DECLARE     
    @startDate date = '2015-01-01',
    @endDate date = '2015-01-28';

with myWeeks (myWeek) AS (
    select DATEPART(WEEK,@startDate) myWeek
    UNION ALL
    select myWeek + 1 from myWeeks
    where
        myWeek < DATEPART(WEEK,@endDate)
)
select 
    w,
    COUNT(s.Erected) standingScaffolds
from myWeeks w
left join Scaffolds s on
    w.myWeek between DATEPART(WEEK,s.Erected) and DATEPART(WEEK,s.Dismantled)

您可能要為此生成一個日期表(=每天有一行的表)。 然后,您可以將其與該表連接起來以很容易地獲得計算結果。

select d.date, count(s.scaffID)
from date d, scaffolds s
where s.erected <= d.date and
(dismantled>= d.date or dismantled is NULL) and
d.date >= @stardate and
d.date <= enddate
group by d.date

希望這沒關系,現在無法測試。

日期表在其他情況下也非常有用,例如,您可以在那里度過當地假期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM