我尝试在Sequel Pro中使用内部联接运行查询以使用此方法获取最新的记录/发票:
SELECT tt.Hotel_Property, tt.Preferred_Hotel_Status
FROM hotel_detail tt
INNER JOIN
(SELECT Hotel_Property, MAX(STR_TO_DATE (`Invoice_Date`, '%m/%d/%Y')) AS MaxDateTime
FROM hotel_detail
GROUP BY Hotel_Property) groupedtt
ON tt.Hotel_Property = groupedtt.Hotel_Property
AND tt.Invoice_Date = groupedtt.MaxDateTime
但它正在运行查询很长一段时间,我不确定它是否会实际执行(等待14分钟后取消它)。我知道有很多数据需要解决,但是想知道是否有人有建议让它运行得更快?
*理想情况下,我希望每个酒店物业都有一条记录,给出最近的发票日期和与该最大发票相关的状态
谢谢!
据我所知,续集专业版使用MySQL,因此您可能无法使用分析函数,但请尝试以下方法:
SELECT
Hotel_Property
, Preferred_Hotel_Status
, MAX(STR_TO_DATE (`Invoice_Date`, '%m/%d/%Y')) OVER(PARTITION BY hotel_property) AS MaxDateTime
FROM hotel_detail
如果这不起作用,那么我建议根据日期在“块”中运行查询。因此,可以通过使用WHERE子句一次运行一天。即:
SELECT tt.Hotel_Property, tt.Preferred_Hotel_Status
FROM hotel_detail tt
INNER JOIN
(SELECT Hotel_Property, MAX(STR_TO_DATE (`Invoice_Date`, '%m/%d/%Y')) AS MaxDateTime
FROM hotel_detail
WHERE DATE = "the_date_you_want_to_run"
GROUP BY Hotel_Property) groupedtt
ON tt.Hotel_Property = groupedtt.Hotel_Property
AND tt.Invoice_Date = groupedtt.MaxDateTime
WHERE DATE = "the_date_you_want_to_run"
然后,您可以分别查看不同日期的结果,或者只是将它们插入到新表中,您可以在其中执行更多分析。
尝试使用相关子查询:
select hd.*
from hotel_detail hd
where str_to_date(hd.invoice_date, '%m/%d/%Y') =
(select max(str_to_date(hd2.invoice_date, '%m/%d/%Y'))
from hotel_detail hd2
where hd2.hotel_property = hd.hotel_property
);
这可以利用hotel_detail(hotel_property, invoice_date)
的索引。如果使用date
或datetime
的本机SQL格式正确存储日期,则索引会更有效。