[英]How do I write query if I want 1st day of the month falls in 1st week in T-SQL
[英]How do I write a SQL query to count how many times a week an item shows up in a week?
我正在尝试编写一个 PROC SQL 查询来计算每周购买特定对象的次数。 问题是,我不确定如何为 7 天部分编码。 我原本想写这样的代码:
PROC SQL;
SELECT COUNT(DATE_FILE)
FROM DATA
WHERE DATE BETWEEN (03-07-2021) and (03-14-2021)
GROUP BY OBJECT
QUIT;
问题是,我无法进入并手动查看一周内的所有日期 - 我需要让代码自动准确地计算一周。 我应该怎么写这个?
我不确定您的数据是否像这样,但是您可以使用周函数并找到代表一周的开始日期和结束日期。 我使用了示例代码:
data test;
input items $4. date date9.;
week_no=week(date);
format date date9.;
datalines;
obj1 1-Jan-21
obj2 2-Jan-21
obj1 3-Jan-21
obj3 4-Jan-21
obj1 5-Jan-21
obj2 6-Jan-21
obj3 7-Jan-21
obj4 7-Jan-21
obj1 8-Jan-21
obj2 9-Jan-21
obj3 10-Jan-21
obj1 11-Jan-21
obj2 12-Jan-21
obj3 13-Jan-21
obj1 14-Jan-21
obj1 15-Jan-21
obj2 16-Jan-21
obj3 17-Jan-21
obj4 18-Jan-21
obj2 19-Jan-21
obj3 20-Jan-21
obj1 21-Jan-21
obj2 22-Jan-21
obj1 23-Jan-21
obj2 24-Jan-21
obj4 25-Jan-21
obj4 26-Jan-21
obj1 27-Jan-21
obj2 28-Jan-21
obj4 29-Jan-21
obj1 30-Jan-21
obj1 31-Jan-21
obj4 1-Feb-21
obj2 2-Feb-21
obj2 3-Feb-21
obj3 3-Feb-21
;
run;
data find_week last_of_each_week(keep=week_no beg_end);
length beg_end $50.;
set test;
by week_no;
retain beg_end '';
if first.week_no then beg_end=put(date, date9.);
else if last.week_no then beg_end=catx("-",beg_end,put(date, date9.));
output find_week;
if last.week_no then output last_of_each_week;
run;
proc sql;
create table week_data
as
select date, items, a.week_no, b.beg_end
from find_week a
inner join last_of_each_week b
on a.week_no=b.week_no;
quit;
proc sql;
create table count_obj
as
select beg_end, week_no, items, count(items)
from week_data
group by beg_end, week_no, items
order by week_no, items;
quit;
proc print data=count_obj; run;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.