繁体   English   中英

尝试在MySQL中将IF与MAX结合使用以获取2个表之间的最新日期

[英]Trying to use IF with MAX in MYSQL to get most recent date between 2 tables

我有两个表(MySQL),一个带有类别列表,另一个带有可以分配给类别的产品列表。 我需要在两个表中提取最新更改的日期,以便在需要时可以重置此页面的缓存。

我似乎在CASE中使用MAX()时很挣扎,目前可以使用它,但是产品日期只是输入到数据库中的最新日期,而不一定是最新日期。

SELECT c.pageid as caturl, p.updated as pup, c.updated as dup,

CASE WHEN p.updated > c.updated THEN p.updated ELSE c.updated END AS latest

FROM products p, categories c 

WHERE p.catid = c.id AND c.hide=0

GROUP BY c.title

当我尝试在CASE中使用MAX()时,它会引发错误,就像使用IF时一样。

谢谢您的帮助。

好的,我要刺死这两个派生表。

一种,计算类别表中每个类别的最近更新日期:“ catdates”(并返回pageid)

其他,针对产品表中的每个类别,计算给定类别中所有产品的最近更新日期:“产生”

然后,我们仅加入categoryid并获得更高的价值。

SELECT c.pageid,
GREATEST(proddate.LastModified,catdates.LastModified) AS LastModified
from
(SELECT p.catid as catid,MAX(p.updated) AS LastModified
FROM products p
GROUP BY p.id,p.catid) proddates
INNER JOIN 
(SELECT c.id AS catid,c.pageid,MAX(c.updated) AS LastModified
FROM categories c
WHERE c.hide=0
GROUP BY c.id,c.pageid) catdates
ON proddates.catid=catdates.catid

如果只需要最新的行,则类似于:

SELECT   
  c.pageid as caturl
  , p.updated as pup
  , c.updated as dup
  ,GREATEST(p.updated,c.updated) AS latest
FROM products p
INNER JOIN categories c ON (p.catid = c.id)
WHERE c.hide=0
GROUP BY caturl
HAVING lastest = MAX(lastest)

greatest函数否定了对case when ,尽管它不会更改查询。
真正的变化是在having子句中,该子句仅选择最新的行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM