我创建了一个查询,以查找分支队列中的每个票证进行了多少事务。
所以我有一个Tickets_table,它有字段Branch,number_of_ticket,issue_date和Ticket_call_time,Ticket_End_time (这是票证停止服务的时间)
Transaction_table拥有每天在每个分支机构中进行的事务。Transaction_Table的字段为Branch、Date和Transaction_time。为了找出每个票据进行了哪些交易,我创建了一个查询,将分支和日期上的两个表以及Ticket_table.Ticket_call_time<=Transaction_table.Transaction_time和Ticket_table.Ticket_End_time>=Transaction_table.End_time上的两个表连接起来,如下所示:
SELECT
Transaction_table.Branch,
Tickets_table.Ticket,
Tickets_table.Date,
Transactions_Table.Transaction_Time,
Ticket_table.Ticket_call_time,
Ticket_table.Ticket_End_time,
QTicket_table.Ticket_Call_time,
Transaction_table.Transaction_code,
[Branch] & [Date] & [Ticket] AS branchdateticket
FROM
Transactions_Table
INNER JOIN
Tickets_Table
ON (Transaction_table.Branch = Ticket_table.Branch) AND
Transaction_table.Date = Ticket_table.Date AND
Ticket_table.Ticket_call_time<=Transaction_table.Transaction_time AND
Ticket_table.Ticket_End_time>=Transaction_table.End_time);这个查询运行得很好。
我有一个表,对于每个票证、分支和日期的组合,都有事务进行,但有数百万行。我尝试执行另一个查询来计算最后一列branchdateticket的事务数,这是一个经典的方法:
SELECT
branchdateticket,
count(Transaction_code)
FROM
the_query_above
GROUP BY
branchdateticket这个查询大约需要一天的时间才能运行。
你能帮我开快点吗?
发布于 2019-02-12 22:04:19
尝试将筛选子句移到联接之外:
SELECT Transaction_table.Branch, Tickets_table.Ticket, Tickets_table.Date, Transactions_Table.Transaction_Time, Ticket_table.Ticket_call_time, Ticket_table.Ticket_End_time, QTicket_table.Ticket_Call_time, Transaction_table.Transaction_code, [Branch] & [Date] & [Ticket] AS branchdateticket
FROM Transactions_Table
INNER JOIN Tickets_Table
ON (Transaction_table.Branch = Ticket_table.Branch) AND Transaction_table.Date = Ticket_table.Date)
WHERE
Ticket_table.Ticket_call_time <= Transaction_table.Transaction_time and Ticket_table.Ticket_End_time >= Transaction_table.End_time;或者将查询一分为二-第一个没有where子句;第二个将第一个查询作为源,并包含where子句。
https://stackoverflow.com/questions/54651640
复制相似问题