标题可能会产生误导,但我不确定另一种表达方式。如果有点慢,下面的查询按预期工作。但是,当我尝试在查询周围包装INSERT INTO
时,它会锁定数据库。 Table1
包含少于1,000条记录,Table2
少于1,500条记录。
查询的目的是根据表1和表2中列中包含的日期/时间组匹配记录。问题的关键是将结果集放入一个唯一的表中,以便可以导出。
此查询是我在此处可以找到的变体,可能会澄清我的意图:https://social.msdn.microsoft.com/Forums/office/en-US/1305b3a9-94c9-4e7c-a5fe-7b64a79600ca/select-closest-earlier-date。改变的不是寻找最近的日期,而是在我检索最近的一天之前。
SELECT Table1.*, (
SELECT Table2.Column1 FROM Table2 WHERE Table2.Column1 = (
SELECT Max(T.Column1) FROM Table2 AS T WHERE T.Column1 <= Table1.Column1)) AS TempCol FROM Table1
有没有其他选择我可以尝试分解这个SQL,或者我是唯一可以让它运行直到它完成的选项?
输出示例:
Table1.ID Table1.Column1 T.Column1
1 2/1/2015 12:00 2/1/2015 08:30
2 2/1/2015 12:15 2/1/2015 08:30
3 2/1/2015 12:30 2/1/2015 08:30
4 2/1/2015 12:45 2/1/2015 08:30
5 2/1/2015 13:00 2/1/2015 12:55
答案 0 :(得分:0)
您可以尝试将查询结果插入到新表中:
SELECT * INTO newTable FROM (
SELECT Table1.*, (
SELECT Table2.Column1 FROM Table2 WHERE Table2.Column1 = (
SELECT Max(T.Column1) FROM Table2 AS T WHERE T.Column1 <= Table1.Column1)) AS TempCol FROM Table1
)
然后使用SELECT * FROM newTable
作为查询运行INSERT INTO。
但根据你所说的你需要,你为什么不运行这样的东西:
select table1.*
, (select max(t2.column1) from table2 as t2 where t2.column1 < table1.column1) as t2col1
from table1
或
select table1.ID, table1.column1, max(table2.column1)
from table1
left join table2 on table2.column1 < table1.column1
group by table1.ID, table1.column1
从table1获取所有记录,以及table2中table2的column1小于table1的column1的最大日期。