【问题标题】:Sql query- needs to extract records based on Datefieldsql查询-需要根据Datefield提取记录
【发布时间】:2012-09-04 13:35:42
【问题描述】:

我需要在每个月的最后一个星期一从 Table1 中提取数据并将其插入到 Table2 中。我的表的基本版本是这样的..

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

表 2(ID、名称、EffectiveDate、ProcessDate)

我只想提取 Effectivedate 从当前日期起 4 个月的那些记录(例如:如果 EffectiveDate 是 1 月 1 日,那么它应该在 4 月 1 日之后提取......)。实际上 Table2 被用于报告目的,所以我们有 'processDate' 字段,我们可以在过滤时使用。

任何帮助将不胜感激..谢谢

编辑:

好吧,我知道我们可以做这样的事情

有效日期

【问题讨论】:

标签: sql sql-server


【解决方案1】:

这样的?

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

更新:

所以您想要 4 个月之前的所有记录?然后只需切换

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

更新 2:

试试这个:

SELECT 
    * 
FROM Table1 
    LEFT JOIN Table2 ON Table1.ID = Table2.ID 
WHERE 
    Table1.EffectiveDate <= DATEADD(mm, -4, GETDATE())
    AND Table2.ProcessedDate IS NULL

【讨论】:

  • 如果您在 4 月 1 日运行此查询.. 它将检索 Effectivedate 晚于 1 月 1 日的所有记录。我不想要从 1 月 1 日到 4 月 1 日的任何记录。我想要早于 1 月 1 日且尚未处理的记录..(为简单起见,考虑在 4 月 1 日运行查询..)
  • @user569711.. 感谢您的帮助.. 我在 Table1 中没有 Processed(Bit) 字段..但是有什么方法可以使用 Table2 的“ProcessedDate”吗?
  • +1..我认为逻辑会给我们想要的输出..你认为随着表的增长它会影响性能吗..?
  • 当然。要检索的数据越多,所需的时间就越长。如果您期望大量数据增长,请正确索引表。我可能还应该指出,您应该去掉 * 并将其替换为您实际需要的列名。
猜你喜欢
  • 2017-07-02
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多