我创建了一个查询,以查找分支队列中的每个票证进行了多少笔交易。
所以我有一个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
此查询大约需要一天的时间。
您能帮我加快速度吗?
答案 0 :(得分:0)
尝试将过滤器子句移到联接之外:
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子句。