Mysql 对于WHERE子句的两个独立结果,如何从单个表中的单个列中获取最近的两个日期?
我有一个返回5列的查询 其中一列显示一行的最新日期值,其中一列包含字符串“卖方联系人”或“买方联系人” 原始代码工作正常,如下所示Mysql 对于WHERE子句的两个独立结果,如何从单个表中的单个列中获取最近的两个日期?,mysql,Mysql,我有一个返回5列的查询 其中一列显示一行的最新日期值,其中一列包含字符串“卖方联系人”或“买方联系人” 原始代码工作正常,如下所示 SELECT TRIM(p.title) AS `Property Address`, TRIM(us.name) AS `Staff`, DATE_FORMAT(FROM_UNIXTIME(MAX( n.datecreated)), '%d-%m-%Y') AS `Last Contact Note`, DATEDIFF( DATE_F
SELECT
TRIM(p.title) AS `Property Address`,
TRIM(us.name) AS `Staff`,
DATE_FORMAT(FROM_UNIXTIME(MAX( n.datecreated)), '%d-%m-%Y') AS `Last Contact Note`,
DATEDIFF(
DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())), '%Y-%m-%d'),
DATE_FORMAT(FROM_UNIXTIME(MAX(n.datecreated)), '%Y-%m-%d')
) AS `Days Since Last Note`
FROM ias_property AS `p`
LEFT JOIN ias_note_stream AS `ns` ON ns.target_id = p.id
LEFT JOIN ias_note AS `n` ON ns.note_id = n.id
LEFT JOIN ias_user_staff AS `us` ON p.user_staff_id = us.id
WHERE p.status = 'sold' AND p.isarchived = 0
AND us.position = 'SP'
AND (n.data LIKE '%buyer-contact%' OR n.data LIKE '%seller-contact%')
GROUP BY p.id
ORDER BY MAX(n.datecreated) ASC
我尝试对每个结果使用两个子查询来实现上述功能。它不会失败或导致任何错误代码。但是在更大的、实时的数据库上,它花费的时间太长(返回大约270行,我假设子查询的时间是以前的270^270倍;它从未完成,只是挂起)
有没有办法让事情变得简单一些,这样我就可以得到看起来像这样的东西
DATE_FORMAT(FROM_UNIXTIME(MAX(
n.datecreated WHERE n.data LIKE '%seller-%'
)), '%d-%m-%Y') AS `Last Buyer Contact Note;
TLDR:如何将来自同一列的WHERE子句的两个结果显示为两个单独的列(如
a
,如b
)等?您可以将IF
放在max函数中,以仅获取某些值的最大值
DATE_FORMAT(FROM_UNIXTIME(MAX(IF(n.data LIKE '%buyer-contact%',n.datecreated,NULL))), '%d-%m-%Y') AS `Last Buyer Contact Note`
DATE_FORMAT(FROM_UNIXTIME(MAX(IF(n.data LIKE '%seller-contact%',n.datecreated,NULL))), '%d-%m-%Y') AS `Last Seller Contact Note`
添加这些不应影响原始查询的性能
DATE_FORMAT(FROM_UNIXTIME(MAX(IF(n.data LIKE '%buyer-contact%',n.datecreated,NULL))), '%d-%m-%Y') AS `Last Buyer Contact Note`
DATE_FORMAT(FROM_UNIXTIME(MAX(IF(n.data LIKE '%seller-contact%',n.datecreated,NULL))), '%d-%m-%Y') AS `Last Seller Contact Note`