根据查询创建 table

Create a table based on a query

标题可能具有误导性,但我不确定是否有其他措辞方式。如果有点慢,下面的查询按预期工作。但是,当我尝试在查询周围包装 INSERT INTO 时,它会锁定数据库。 Table1 包含少于 1,000 条记录并且 Table2 少于 1,500 条记录。

查询的objective是根据表1和表2的列所包含的date/time组来匹配记录。问题的症结在于将结果集放入唯一的table 这样就可以导出了。

此查询是我在这里找到的查询的变体,可能会阐明我的意图: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

您可以尝试将查询结果插入新的 table:

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。