我试图在一个月的时间内进行一次查询。这是一个有效的查询:
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 :(得分:-1)
我认为它无法识别DATE(calendar_date)
和DATE_SUB(calendar_date, INTERVAL 1 MONTH)
,如果正确,您的tenancies
表格本身应该有一个calendar_date字段,否则您需要加入tenancies
中间查询中的calendar_dates
表也是如此。因为这是一个单独的查询。