我有一个代码,过go 几个月我一直在用它来获取数据,但当新年来临时,我意识到它没有填充任何数据,因为它没有正确地计算星期.

我将代码写为第4周,但它没有给出2023年12月最后几周的任何数据.有人能帮我弄清楚如何编辑代码,使它给我的最后几个星期. 我假设这是因为当前周是1,1 - 4 = -3,这是不存在的.

Select id,    
EXTRACT(WEEK FROM transaction_date) as week
    from table1
    where week BETWEEN DATEPART(WEEK, GETDATE())-4 AND DATEPART(WEEK, GETDATE())

推荐答案

当前周为1,并且1-4=-3不存在.

由于这是一个数据查找,并且您还没有记录查找值列表,因此简单的答案是将缺少的值添加到您的列表中.当然,这是一个黑客攻击,但你有一个星期的列表,如果-3,-2,-1和0对你的逻辑很重要,那么它们可能应该在你的查找列表中有一个条目.

如果查找列表有实际的日历日期,而根本不是查找表,那么解析4周前的实际日期,根本就不要使用周数字!

如果您不想添加这些条目,这个问题通常是通过列表的wrapping来解决的,所以如果您的查找索引小于零,您可以将索引值add到列表中的maximum索引.

let currentWeek = DATEPART(WEEK, GETDATE())
let startWeek = currentWeek - 4
if startWeek < 0 then startWeek = 52 - startWeek

在SQL中,这大致可以转化为两个独立的标准:

 WHERE
 (   
     week BETWEEN DATEPART(WEEK, GETDATE())-4 AND DATEPART(WEEK, GETDATE())
  OR week BETWEEN 52 + DATEPART(WEEK, GETDATE())-4 AND 52
 )

这是由于OR引用而起作用的.当当前周为2时,第一个标准将匹配第1周和第2周(0和-1将不存在),但第二个标准将匹配52-0(52)和52-1(51).第53周和第54周被硬编码的52排除在外,作为第二个BEWTEEN子句中的上限.

我已经将这些标准括在方括号中,这样您就不会意外地在此基础上错误地编写其他标准.

Sql相关问答推荐

帮助修复查询以识别SQL DW中数据中的递归关系

无法找到正确的SQL查询需求

Stack Exchange站点上的最短帖子(按正文长度计算,用户名为原始发帖(SEDE))

当交叉联接3个或更多表时,实体框架中是否会传输冗余的行数据并占用数据库带宽?

Django将字符串筛选为整数?

为什么TRY_CONVERT返回一个XML验证错误而不是NULL?

更新其组的日期字段值小于最大日期减go 天数的记录

返回UPSERT中的旧行值

将计算列设置为持久化的目的是什么?

按两列分组,并根据SQL中的条件返回第三个列值

Postgres jsonpath运算符的变量替换,如_regex?

查询以从时间范围列表中查找唯一时间段

使用 Oracle SQL Developer 将不同的列值转换为列会导致错误 ORA-01489

在Snowflake中,如何将以逗号和连字符分隔的多个混合数值拆分成数字列表

一次 Select 语句中按组累计的SQL累计数

如何在 ClickHouse SQL 中使用 CTE 将邻居语句中的数字作为偏移量传递?

Postgres:表的累积视图

如何在 RavenDB Studio (RQL) 中插入更新文档

我现在如何显示重复的汽车? postgresql

SQL/Postgres:按日期和其他属性对相关性能进行分组