2016-11-26 1 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() 

이 나에게 내가 원하는 모든 날짜를 가져옵니다

나는 다른 쿼리가 있습니다.

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() 

누구나 어떤 제안이 : 나는 두 하위 쿼리를 수행하려고 할 경우에는이 calendar_date 인식하지 못하는 이유는 무엇입니까?

+0

귀하의 테이블 스키마를 추가하면 귀하의 질문이 명확해질 것이라고 생각합니다. 귀하의 검색어는 완전히 다른 방식으로 다시 작성해야한다고 생각합니다. 사실 나는 당신이 필드의 위치와 calendar_dates와 tenancies의 외래 키에 따라 다른 방법으로 테이블을 조인 할 필요가 있다고 생각한다. –

+1

http://meta.stackoverflow.com/questions/333952/why-should-i-provide- 매우 단순한 SQL 쿼리 인 an-mcve-for-what-to-me-to-be-a-ave – Strawberry

답변

-1

내가, 당신의 tenancies 테이블 자체가 calendar_date 필드가 있어야 올바른 경우는 DATE(calendar_date)DATE_SUB(calendar_date, INTERVAL 1 MONTH)를 인식하지 못하는 가정, 그렇지 않으면 당신도 중간 쿼리에 calendar_dates 테이블과 tenancies에 가입해야합니다. 때문에 별도의 쿼리.