簡體   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