根据查询创建表

时间:2015-05-15 14:39:16

标签: sql ms-access-2007

标题可能会产生误导,但我不确定另一种表达方式。如果有点慢,下面的查询按预期工作。但是,当我尝试在查询周围包装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

1 个答案:

答案 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的最大日期。