如果您需要在加入之前进行计数,那么您必须在加入之前生成计数。
这是实现这一目标的一种方法:
SELECT A.Port_ID, A.refoct2015, B.refSept2015 , C.RefOct2014
FROM (SELECT Port_ID, Booking_Date, count(Ref) as refoct2015
FROM report
GROUP BY Port_Id, Booking_Date) A
INNER JOIN
(SELECT Port_ID, Booking_Date, count(Ref) as refSept2015
FROM Report_sept2015
GROUP BY Port_Id, Booking_Date) B
ON A.Port_ID = B.Port_ID
INNER JOIN
(SELECT Port_ID, Booking_Date, count(Ref) as RefOct2014
FROM report_oct2014
GROUP BY Port_Id, Booking_Date) C
ON B.Port_ID = C.Port_ID
虽然包括 booking_date 而没有加入它似乎很奇怪......
如果我在表 A 中有 100 个不同的日期,在表 B 中有 100 个不同的日期,在表 c 中有 100 个不同的日期,那么您的结果集将是 100*100*100 假设每个共享相同的 port_Id ...可能为什么它需要 15分钟...确定你没有错过加入?
这对我来说似乎更有意义......
SELECT A.Port_ID, A.refoct2015, B.refSept2015 , C.RefOct2014
FROM (SELECT Port_ID, Booking_Date, count(Ref) as refoct2015
FROM report
GROUP BY Port_Id, Booking_Date) A
INNER JOIN
(SELECT Port_ID, Booking_Date, count(Ref) as refSept2015
FROM Report_sept2015
GROUP BY Port_Id, Booking_Date) B
ON A.Port_ID = B.Port_ID
and A.Booking_date= B.Booking_date
INNER JOIN
(SELECT Port_ID, Booking_Date, count(Ref) as RefOct2014
FROM report_oct2014
GROUP BY Port_Id, Booking_Date) C
ON B.Port_ID = C.Port_ID
and A.Booking_date= B.Booking_date
但是,这意味着如果日期和端口 ID 不在所有表中,那么您就会遇到问题。由于内部连接而消除了数据。通常我会使用完全外连接来解决这个问题,但 mySQL 不支持它。您必须使用外部联接和联合来模拟行为。
因此,不要继续猜测你在追求什么。用简单的英语解释这些表格的用途以及您要完成的工作;通过编辑您的原始问题。
恐怕我们在这里陷入 XY 问题
如果 booking_date 不在选择中,为什么它是相关的?
看起来你真的想按日期从这三个表中透视数据......但没有显示日期......
你在追求类似的东西吗
Port_Id Date Oct2015 Sept2015 Oct2014
1 1/1/2015 500 250 0
1 1/2/2015 100 60 0
2 1/1/2015 100 540 60
?