mySQL
データベースに 2 つのテーブルがあります
Table 1 [Orders]
DateOpened (date),
revenue
Table 2 [Movements]
DateStarted (date),
DateStopped (date)
任意の日付について、表 1 に 0 個以上のエントリが存在する可能性があり、表 2 の場合、DateStarted
または両方に 0 個以上のエントリが存在する可能性がありますDateStopped
(DateStarted と DateStopped の両方が同じ日または異なる日である可能性があります) 。
これらのテーブルで日付範囲 (例: 1 か月) をクエリし、次の形式のデータを含む日付ごとに結果セットを取得したいと考えています。
date, sum(revenue), num_orders (count of orders for the date), num_movements (count of movements for the date)
各部分を実行する2つの個別のクエリを作成しましたが、それらを組み合わせて1つの効率的なクエリを実現し、結果セットをコードにマージする必要がないようにする方法がわかりません。私がハングアップしているように見えるのは、count() 関数が正しく適用されていることです。
作業中の既存のクエリは次のとおりです。
select count(*) as total_movements, movement_date
from (
select dropoffdate as movement_date
from bb_movement
where (dropoffdate >= '2013-01-01' and dropoffdate <= '2013-06-30')
union all
select pickupdate as movement_date
from bb_movement
where (pickupdate >= '2013-01-01' and pickupdate <= '2013-06-30')
) as t3
group by movement_date
order by movement_date asc
select count(*) as num_orders, sum(order_amount) as revenue, dateopened as date_opened
from bb_order
where (dateopened >= '2013-01-01' and dateopened <= '2013-06-30')
group by dateopened
order by dateopened asc
CREATE TABLE IF NOT EXISTS bb_movement
(
movementid
int(10) unsigned NOT NULL AUTO_INCREMENT,
orderid
int(10) unsigned NOT NULL COMMENT
dropoffdate
date NOT NULL,
pickupdate
date NOT NULL )
CREATE TABLE IF NOT EXISTS bb_order
(
orderid
int(10) unsigned NOT NULL AUTO_INCREMENT,
movementid
int(10) unsigned NOT NULL,
dateopened
date NOT NULL,
order_amount
float NOT NULL DEFAULT '0' }