Mysql 对于WHERE子句的两个独立结果,如何从单个表中的单个列中获取最近的两个日期?

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

我有一个返回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_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`