永发信息网

求统计每周记录数的SQL语句

答案:6  悬赏:30  手机版
解决时间 2021-01-21 00:06
  • 提问者网友:别再叽里呱啦
  • 2021-01-20 08:55
求统计每周记录数的SQL语句
最佳答案
  • 五星知识达人网友:蕴藏春秋
  • 2021-01-20 09:06
declare @weeknum int,@year int,@month int;--这里是周数、年、月
declare @weekday int,@starttime datetime,@endtime datetime,@timechar varchar(20);--星期几、一周开始、一周结束、当月第一天字符串
declare @datepart int;--需要查询的周首天与月首天的时间差
--赋值2010年3月 第5周
select @year=2010,@month=3,@weeknum=5;
set @timechar=cast(@year as varchar)+'-'+cast(@month as varchar)+'-1'
--拼接出这个月的第一天
select @timechar

select @weekday=datepart(weekday,@timechar)

set @datepart=(@weeknum-2)*7+(8-@weekday)

select @starttime=dateadd(dd,@datepart,@timechar)
select @endtime=dateadd(dd,7,@starttime)

--消除到上个月 及 下个月的出入部分
if (@starttime<@timechar)
set @starttime=@timechar
if (@endtime>dateadd(mm,1,@timechar))
set @endtime=dateadd(mm,1,@timechar)
select @weeknum,@starttime,@endtime

--然后就是使用@starttime,@endtime
select count(*) from tb where 时间>=@starttime and 时间<@endtime
全部回答
  • 1楼网友:拾荒鲤
  • 2021-01-20 14:24
新建一个周信息表,存储周信息(周号、周开始时间、周结束时间)
你的周是按照自然周,还是按月结的周?自然周就不用说了,正常的周一到周日。按月结的,就是所有的周都落在一个月内,不会存在跨月的情况。比如2010年1月第一周就是 2010年1月1日到2010年1月9日,这样一周可能大于七天,也可能小于7天。
按照自然周的给你个方法:
create table bga050t (weak_no varchar(10),
strt_dt datetime,
end_dt datetime
CONSTRAINT [PK_bga050t] PRIMARY KEY CLUSTERED
(
[weak_no]
) ON [PRIMARY]
)
declare @weak_no varchar(18)
declare @strt_dt datetime
declare @end_dt datetime
declare @n int
set @n=1
set @strt_dt = '2007-12-31'
set @weak_no = ''
WHILE(@strt_dt < '2021-01-04')
BEGIN
IF @weak_no<>left(convert(varchar(10),@strt_dt,120),8)
BEGIN
set @weak_no=left(convert(varchar(10),@strt_dt,120),8)
set @n=1
end
set @end_dt= dateadd(d,6,@strt_dt)
insert into bga050t (weak_no,strt_dt,end_dt)
values(@weak_no+convert(varchar,@n),@strt_dt,@end_dt)
set @n=@n+1
set @strt_dt=dateadd(d,1,@end_dt)
END
你要查询年月周只需要把周号分解就可以了。
select a.* from 表 inner join
bga050t b on a.dt between b.strt_dt and b.end_dt
where left(b.weak_no,7)='2009-02' and [周数] = right(b.weak_no,1)
  • 2楼网友:神也偏爱
  • 2021-01-20 13:44
DECLARE @dYear VARCHAr(4)
DECLARE @dMonth VARCHAr(2)
DECLARE @dDate VARCHAr(10)
DECLARE @dBDate VARCHAr(10)
DECLARE @dEDate VARCHAr(10)
DECLARE @N INT
SET @dYear = '2010'
SET @dMonth = '02'
SET @N = 1
SET @dDate = @dYear + '-' + @dMonth + '-01' --某个月的第一天
SELECt @dBDate = DATEADD(DAY,1 - DATEPART(dw,@dDate) + (@N-1)*7,@dDate) --获取第N周的第一天
SELECT @dEDate = DATEADD(DAY,1 - DATEPART(dw,@dDate) + (@N)*7,@dDate) --获取第N周的最后一天
-- 以上是获取某年、某月、某周的第一天及最后一天
要实现你的功能,就是通过传递参数(年,月,周)
然后执行下列语句:
select count(1) from 表 where dDate between @dBDate and @dEDate
  • 3楼网友:罪歌
  • 2021-01-20 12:55
你的周数是怎么算的?
  • 4楼网友:孤老序
  • 2021-01-20 11:39
select date_col,
to_number(to_char(trunc(sysdate, 'yyyy'), 'd')) year_week_day,
first_day_week,
week_no,
week_no - first_day_week + 1 week_no
from (select date_col,
to_number(to_char(trunc(sysdate, 'mm') + 7 - 1, 'ww')) first_day_week,
to_number(to_char(date_col + 7 - 1, 'ww')) week_no
from (select trunc(sysdate, 'mm') + rownum - 1 date_col
from dba_objects
where rownum <= to_number(to_char(last_day(sysdate), 'dd'))))
执行后,参考。
  • 5楼网友:纵马山川剑自提
  • 2021-01-20 10:45
是指那一周一共有多少条记录的话
表应该有id吧
select count(id) from 表名 between 起始日期 and 最终日期
是这个意思么....
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯