2016-11-26 49 views
-1

我想經過一段一個月做一個查詢。這是一個工作查詢:MySQL的滾動值 - 子查詢與業增加值

SELECT AVG(days) 
FROM (SELECT datediff(IF(MIN(date_end) = '0000-00-00', DATE(NOW()), MAX(date_end)), MIN(date_start)) AS days 
     FROM tenancies 
     WHERE deleted_at IS NULL AND date_start < DATE_SUB(NOW(), INTERVAL 1 MONTH) 
     GROUP BY tenancies.tenant_id) 

我想用日期替換NOW()

我有另一個查詢:

SELECT calendar_date 
FROM calendar_dates 
WHERE calendar_date BETWEEN NOW() - INTERVAL 1 MONTH AND NOW() 

這讓我所有我想要的日期。如果我嘗試做一個雙重子查詢它不承認calendar_date

SELECT calendar_date, (SELECT AVG(days) 
FROM (SELECT datediff(IF(MIN(date_end) = '0000-00-00', DATE(calendar_date), MAX(date_end)), MIN(date_start)) AS days 
     FROM tenancies 
     WHERE deleted_at IS NULL AND date_start < DATE_SUB(calendar_date, INTERVAL 1 MONTH) 
     GROUP BY tenancies.tenant_id) d) AS days 
FROM calendar_dates 
WHERE calendar_date BETWEEN NOW() - INTERVAL 1 MONTH AND NOW() 

任何人有什麼建議?

+0

我認爲添加您的表格模式會澄清您的問題,您的查詢是有線的,我認爲您需要以完全不同的方式重寫它!事實上,我認爲你需要根據字段的位置以及calendar_dates和tenancies的外鍵以不同方式連接表格 –

+1

請參閱http://meta.stackoverflow.com/questions/333952/why-should-i-provide- AN-MCVE換什麼,似乎對我將要-A-極簡單的SQL查詢 – Strawberry

回答

-1

我認爲它不承認DATE(calendar_date)DATE_SUB(calendar_date, INTERVAL 1 MONTH),如果正確,你tenancies表應該在自身有CALENDAR_DATE場,否則,你需要在中間查詢與calendar_dates表加入tenancies了。因爲那是一個單獨的查詢。