如何查询每周数据查询

时间:2014-01-30 14:48:23

标签: sql sql-server tsql

我有一个类似的查询,只显示特定日期的数据。但是,如何修改此数据以显示前7天的数据?因此,当我本周运行查询显示日期范围的数据时 2014年1月24日 - 2014年1月30日然后下周显示2014年1月31日 - 2014年6月2日的数据

SELECT * FROM SalesInformation
WHERE (datename(dw, getdate()) = 'Monday' AND CONVERT(VARCHAR(10), DateSold, 101) = DATEADD   (Day,DATEDIFF(Day,0,GetDate()),0))
OR (datename(dw, getdate()) = 'Tuesday' AND CONVERT(VARCHAR(10), DateSold, 101) = DATEADD(Day,DATEDIFF(Day,0,GetDate()),0))
OR (datename(dw, getdate()) = 'Wednesday' AND CONVERT(VARCHAR(10), DateSold, 101) = DATEADD(Day,DATEDIFF(Day,0,GetDate()),0))
OR (datename(dw, getdate()) = 'Thursday' AND CONVERT(VARCHAR(10), DateSold, 101) = DATEADD(Day,DATEDIFF(Day,0,GetDate()),0))
OR (datename(dw, getdate()) = 'Friday' AND CONVERT(VARCHAR(10), DateSold, 101) = DATEADD(Day,DATEDIFF(Day,0,GetDate()),0))

3 个答案:

答案 0 :(得分:2)

获取最近七天的数据:

WHERE ... AND DATEDIFF(Day,dw,GetDate())<=7

编辑:获取当前周的数据:

AND dw BETWEEN(DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)
AND DATEADD(week, DATEDIFF(day, 0, getdate())/7, 6)

更好的表现:

DECLARE @dw1 datetime = DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)

select ... WHERE dw >= @dw1

多周:

DECLARE @dw1 datetime = DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)
DECLARE @dw2 datetime = DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0)-7

select ... WHERE dw >= @dw1 -- current week
union all
select ... WHERE dw >= @dw2 AND dw < @dw1 -- last week

答案 1 :(得分:1)

这将是七天,包括时间。所以01/23/2014 10:06 AM到1/30/2014 10:06 AM。如果您想要01/23的整天,请投降到日期。

这是2012年的一个完整的工作示例。我改为getdate(),以防万一你使用旧版本的引擎。

-- Just playing
use tempdb;
go

-- drop existing
if object_id ('sales') > 0
drop table sales
go

-- create new
create table sales
(
  id int identity (1,1) primary key,
  sold smalldatetime,
  amt smallmoney
);
go

-- clear data
truncate table sales;
go

-- insert data
declare @dte date = '20131231';
declare @amt int;
while (@dte < '20140201')
begin
  set @amt = floor(rand(checksum(newid())) * 50000);
  set @dte = dateadd(d, 1, @dte);
  insert into sales values (@dte, @amt);
end
go

-- Show 7 * 24 hrs worth of data
select * 
from sales
where
  sold >= dateadd(d, -7, getdate()) and
  sold < getdate()
go

enter image description here

查看Aarons博客的日期。它回顾了好的,坏的和丑陋的做法。例如,不要使用BETWEEN。

答案 2 :(得分:0)

这就是我写一个&#34;滚动7天窗口&#34;查询。在这个特定的查询中,我想要一个7天的窗口,从该范围中第一天的凌晨12:00开始,到该范围中最后一天的晚上11:59:59结束。我今天不想要数据。首先计算日期范围,然后在我的查询的where子句中使用。

declare @MinDate datetime,
        @MaxDate datetime

select @MinDate = convert(char(10),getdate()-7,120),
       @MaxDate = convert(char(10),getdate()-1,120) + ' 23:59:59.997'

select *
  from MyTable
 where TheDate >= @MinDate
   and TheDate <= @MaxDate