2016-11-26 1 views
-1

1か月間にわたって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とtenancyの外部キーに基づいて異なる方法でテーブルを結合する必要があると思います –

+1

http://meta.stackoverflow.com/questions/333952/why-should-i-provide-非常にシンプルなSQLクエリであると思われる – Strawberry

答えて

-1

私はそれがそうでなければ、あなたも途中クエリでcalendar_dates表とtenanciesに参加する必要があり、右の場合は、あなたのtenanciesテーブル自体はcalendar_dateフィールドを持つ必要があり、DATE(calendar_date)DATE_SUB(calendar_date, INTERVAL 1 MONTH)を認識しないと仮定します。それは別のクエリだからです。

関連する問題