怎么做按周统计(需要跨年份)

philipsslg 2004-12-27 09:45:01
如果不跨年份不难,跨年份怎么做,每周以星期一为开始,如果2004-12-27到2005-01-02为2005年第一周,那我要统计2005年1-10周的数据怎么统计??(还有好像SQL 2000 默认把岁末年初的一周分成了两周)
...全文
543 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
icedut 2004-12-28
  • 打赏
  • 举报
回复
--我用的方法比较本
--下面的函数GetDateFromWeekDay也是以前别人写的
/*
-- 得到一周的某一天
*/
create function GetDateFromWeekDay(@Year integer,@Week integer,@WeekDay integer)
RETURNS datetime
as
begin
return dateadd(day,-datepart(weekday,dateadd(week,@Week-1,dateadd(year,@Year -1900,0))) + @WeekDay,dateadd(week,@Week-1,dateadd(year,@Year -1900,0)))
end

-------------------------------------------
DECLARE @Week as int
DECLARE @DT1 as smalldatetime
DECLARE @DT2 as smalldatetime

set @Week=datepart(ww,@DT)
set @DT1= dbo.GetDateFromWeekDay(datepart(yy,@DT),@week,1)
set @DT2= dbo.GetDateFromWeekDay(datepart(yy,@DT),@week,7)
--@DT1是一周的开始时间,@DT2是一周的结束时间
--我这样修改后,反正我的系统是可以用了
icedut 2004-12-28
  • 打赏
  • 举报
回复
能不能给个函数输入时间得到是第几周???---datepart函数不是可以么


playyuer 2004-12-28
  • 打赏
  • 举报
回复
创建如下函数
group by 函数 即可

1.方法1
create function udf_WeekDay(@ int,@date datetime)
returns datetime
begin
/*
--周日算作周的最后一天
当 @ <= 1 代表将 @date 映射到 所在周的星期一
当 @ = 2 代表将 @date 映射到 所在周的星期二
当 @ = 3 代表将 @date 映射到 所在周的星期三
当 @ = 4 代表将 @date 映射到 所在周的星期四
当 @ = 5 代表将 @date 映射到 所在周的星期五
当 @ = 6 代表将 @date 映射到 所在周的星期六
当 @ >= 7 代表将 @date 映射到 所在周的星期日
可用于按周汇总 Group by,均支持跨年跨月数据
*/

return
(select dateadd(day
,case when (@@datefirst + datepart(weekday,@date)) % 7 = 0 --周六
then
case when @ between 1 and 6
then @ - 6
else 1
end
when (@@datefirst + datepart(weekday,@date)) % 7 = 1 --周日(七)
then
case when @ between 1 and 6
then @ - 7
else 0
end
when (@@datefirst + datepart(weekday,@date)) % 7 between 2 and 6 --周一至周五
then
case when @ between 1 and 6
then @ + 1 - (@@datefirst + datepart(weekday,@date)) % 7
else 8 - (@@datefirst + datepart(weekday,@date)) % 7
end
end
,@date))
end

go

2.方法2
create function udf_WeekDiff(@BeginDate datetime,@EndDate datetime)
returns integer
begin
return (
select datediff(week,@BeginDate,@EndDate) -- + 1
+ case when (@@datefirst + datepart(weekday,@BeginDate)) % 7 = 1 then 1 else 0 end
- case when (@@datefirst + datepart(weekday,@EndDate)) % 7 = 1 then 1 else 0 end
)
end

go

declare @b datetime,@e datetime
set @b = '2004-12-12'
set @e = '2004-12-20'


select dbo.udf_WeekDiff(@b,@e) + 1 as 跨周数
,dbo.udf_WeekDiff(@b,@e) as 间隔周数
,datediff(week,@b,@e) as [datediff(week,startdate,enddate)]
vinsonshen 2004-12-28
  • 打赏
  • 举报
回复
学习~~~
philipsslg 2004-12-28
  • 打赏
  • 举报
回复
能不能给个函数输入时间得到是第几周???
icedut 2004-12-28
  • 打赏
  • 举报
回复
学习学习
正好要用到
philipsslg 2004-12-28
  • 打赏
  • 举报
回复
系统把2004-12-31算53周,把2005-1-1当做第1周,其实这两周是同一周,怎么把它统计为一周,
group by 进去。
philipsslg 2004-12-28
  • 打赏
  • 举报
回复
set datfirst 1
DATEPART(WEEK, [Date]) as Week
如果不考虑跨年可以这样统计,就是卡在跨年那里,能不能具体说说跨年怎么处理??
yingqing 2004-12-28
  • 打赏
  • 举报
回复
playyuer(退休干部 卧鼠藏虫) ,向你學習
bei_zj 2004-12-28
  • 打赏
  • 举报
回复
playyuer(退休干部 卧鼠藏虫) ,向你学习一下!
philipsslg 2004-12-28
  • 打赏
  • 举报
回复
我是做本周与前9周的曲线图,如果本周是本年度的20几周,那很好统计,如果本周是第二周,那岁末年初那个比较难统计。
icedut 2004-12-28
  • 打赏
  • 举报
回复
datepart在岁末年初的时候得到了2个周数是吧
感觉真复杂啊

你是要1-10周,安周统计数据吧

你看这样是否太笨了:把1-10周,每周的开始日期,结束日期,及对应的周数,放到一个表里,这样可以统计么.例如2004-12-27---2005-1-02 是2005年的第一周的开始日期与结束日期




philipsslg 2004-12-28
  • 打赏
  • 举报
回复
datepart不能算,岁末年初的。
playyuer 2004-12-27
  • 打赏
  • 举报
回复
T-SQL: 三个通用的与日期相关的,辅助按周(星期日是周的最后一天)汇总的自定义函数
http://blog.csdn.net/playyuer/archive/2004/11/04/167172.aspx
数据集名称全球主流期货交易所多品种历史高频行情数据库2008至今 数据规格 文件格式CSV标准表格支持Python pandas库read_csv直接解析 交易所范围CME芝加哥商品交易所NYMEX纽约商业交易所ICE美国欧洲Eurex欧洲期交所CBOE芝加哥期权交易所CBOT芝加哥期货交易所 合约类型金融期货商品期货全品种含主力连续合约各月次月合约 时间粒度1分钟5分钟15分钟30分钟60分钟K线以及日级级月级聚合数据 时间跨度2008年金融危机起覆盖完整市场期 数据存储 云盘加密压缩包分层目录结构总体积100GB 按交易所品种年三级索引支持快速定位提取 数据应用 高频策略开发Level1Level2行情支持订单簿重建验证统计套利市商策略测算滑点与市场冲击效应 机器学习训练结构化CSV适配TensorFlowPyTorch支持LSTM波动率预测异常交易检测等AI模型 量化研究闭环私募机构可用作多因子回测学术机构可进行市场微观结构跨市场联动性等前沿研究 风险建模历史极端行情数据辅助压力测试挖掘黑天鹅事件中的流动性规律 数据优势 经NaN值填充时间戳对齐合约换月滑点校正等17道清洗工序 包含成交明细开盘价最高价最低价收盘价成交量持仓量等多维字段 兼容聚宽QMT掘金等主流量化平台提供PythonMatlab双版本数据接口示例 注本数据集已脱敏处理不包含任何订单流敏感信息 【版权说明】 数据源:银禾金融数据库,解释权归该数据库所有。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧