MySQL Rolling Value - 具有连接值的子查询

时间:2016-11-26 23:43:14

标签: mysql sql data-analysis

我试图在一个月的时间内进行一次查询。这是一个有效的查询:

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

有人有任何建议吗?

1 个答案:

答案 0 :(得分:-1)

我认为它无法识别DATE(calendar_date)DATE_SUB(calendar_date, INTERVAL 1 MONTH),如果正确,您的tenancies表格本身应该有一个calendar_date字段,否则您需要加入tenancies中间查询中的calendar_dates表也是如此。因为这是一个单独的查询。