Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql查询-需要根据日期字段提取记录_Sql_Sql Server - Fatal编程技术网

Sql查询-需要根据日期字段提取记录

Sql查询-需要根据日期字段提取记录,sql,sql-server,Sql,Sql Server,我需要从表1中提取数据,并在每个月的最后一个星期一将其插入表2中。我的表格的基本版本如下 表1(ID、名称、生效日期) 表2(ID、名称、生效日期、处理日期) 我只想提取从当前日期算起生效日期为4个月的记录(例如:如果生效日期为1月1日,则应在4月1日之后提取…)。实际上,表2用于报告目的,所以我们有“processDate”字段,可以在过滤时使用 任何帮助都将不胜感激。谢谢 编辑: 我知道我们可以这样做 EffectiveDate

我需要从表1中提取数据,并在每个月的最后一个星期一将其插入表2中。我的表格的基本版本如下

表1(ID、名称、生效日期)

表2(ID、名称、生效日期、处理日期)

我只想提取从当前日期算起生效日期为4个月的记录(例如:如果生效日期为1月1日,则应在4月1日之后提取…)。实际上,表2用于报告目的,所以我们有“processDate”字段,可以在过滤时使用

任何帮助都将不胜感激。谢谢

编辑:

我知道我们可以这样做

EffectiveDate类似的内容

SELECT * FROM Table1 WHERE EffectiveDate >= DATEADD(mm, -4, GETDATE()) 
更新:

你想要4个月前的所有记录?然后只需切换<运算符:

SELECT * FROM Table1 WHERE EffectiveDate <= DATEADD(mm, -4, GETDATE()) AND processed = 0

从表1中选择*生效日期DATEADD和GETDATE是什么意思?如果您在4月1日运行此查询。。它将检索生效日期晚于1月1日的所有记录。我不想要从1月1日到4月1日的任何记录。我想要的是比1月1日早但尚未处理的记录…(为了简单起见,考虑您在4月1日运行查询…@user569711。。谢谢你的帮助。。我在表1中没有Processed(Bit)字段。但是有没有办法使用表2的ProcessedDate?+1。。我认为逻辑会给我们期望的输出。你认为它会随着表的增长而影响性能吗?当然。要检索的数据越多,所需时间就越长。如果您期望大量数据增长,请正确索引表。我可能还应该指出,您应该去掉*并用实际需要的列名替换它。
SELECT 
    * 
FROM Table1 
    LEFT JOIN Table2 ON Table1.ID = Table2.ID 
WHERE 
    Table1.EffectiveDate <= DATEADD(mm, -4, GETDATE())
    AND Table2.ProcessedDate IS NULL