根据查询创建 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。
标题可能具有误导性,但我不确定是否有其他措辞方式。如果有点慢,下面的查询按预期工作。但是,当我尝试在查询周围包装 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。