【问题标题】:Insert Into Select From Where Between [Latest Data's Date] And [Now]插入从 [最新数据日期] 和 [现在] 之间的位置选择
【发布时间】:2015-07-07 17:53:56
【问题描述】:

我正在尝试运行下面显示的查询,以便将所有数据从 RemoteServer 复制到 LocalServer,该数据介于最新的时间戳记录日期和我执行查询的确切时间之间。

INSERT INTO [LocalServer].[database1].[dbo].[Table1]
SELECT * FROM [RemoteServer].[database1].[dbo].[Table1]
WHERE TimeCol BETWEEN MAX(TimeCol) and CURRENT_TIMESTAMP

但是,运行此查询会导致以下错误:

消息 147,级别 15,状态 1,行 3 聚合可能不会出现在 WHERE 子句中,除非它位于 HAVING 子句或选择列表中包含的子查询中,并且被聚合的列是外部引用。

此错误消息在说什么?我正在寻找什么查询来完成我想要的?

【问题讨论】:

  • 发布更多关于你正在尝试做的事情的细节。从您发布的无效 SQL 中不清楚。

标签: sql select sql-server-2012 sql-insert insert-into


【解决方案1】:

您不能在 WHERE 中使用 MAX(),因为它是一个聚合函数。改用 HAVING()。这是你想要的吗?

INSERT INTO [LocalServer].[database1].[dbo].[Table1]
SELECT * FROM [RemoteServer].[database1].[dbo].[Table1]
WHERE TimeCol BETWEEN (SELECT MAX(TimeCol) FROM 
[LocalServer].[database1].[dbo].[Table1]) and CURRENT_TIMESTAMP

根据马丁·史密斯的评论编辑

【讨论】:

  • 我认为他们试图引用的TimeCol 在本地服务器表中,因为这是唯一有意义的事情。 - 即获取自上次同步以来的记录。
  • 如果他们想要/猜测的解释是正确的,那么他们可能需要> 而不是BETWEEN 以避免在上一批最后一次导入记录时两次提取记录。并且在这种情况下是否需要 <=CURRENT_TIMESTAMP 值得商榷,除非他们正在记录未来的日期。
  • 使用上述代码后,语句完美执行。谢谢。
猜你喜欢
  • 2014-02-24
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
相关资源
最近更新 更多