だから、私は独自のデータを使用しているので、ここにコードをカットペーストすることはできません. そして、申し訳ありませんが、これはおそらく些細なことですが、何らかの理由で、重複している理由について頭を悩ませることができません。
だから、私は4つのテーブルを持っています
表 1 did、vid、sid、cid
表 2 vid、vname
表 3 sid、日付、値
表 4 cid、日付、値
私が達成しようとしているのはtable1です。した、table2.vname、table3.sid、table3.date、table3.value、table4.cid、table4.date、table4.value
私が行った場合
select table1.did, table2.vname, table3. . .
from table 1
join table 2 on table2.vid = table1.vid
join table 3 on table3.sid = table1.sid and table3.date > now() - interval 1 year
where table1.did = 1
;
私はまさに私が欲しいものを手に入れます。
table1.did, table2.vname, table3.sid, table3.date, table3.value
1, blah, 123, 2013-3-1, 123
1, blah, 123, 2013-2-1, 3234
1, blah, 123, 2013-1-1, 111111
1, blah, 123, 2012-12-1, 122222
1, blah, 123, 2012-11-1, 155341
1, blah, 123, 2012-10-1, 102002
それから:
select table1.did, table2.vname, table3. . ., table4. . .
from table 1
join table 2 on table2.vid = table1.vid
join table 3 on table3.sid = table1.sid and table3.date > now() - interval 1 year
join table 4 on table4.cid = table1.cid and table4.date > now() - interval 1 year
where table1.did = 1
;
私に与えます:
t1.did, t2.vname, t3.sid, t3.date, t3.value, t4.cid, t4.date, t4.value
1, blah, 123, 2013-3-1, 123, 456, 2013-3-1, 1112345
1, blah, 123, 2013-3-1, 123, 456, 2013-2-1, 234
1, blah, 123, 2013-3-1, 123, 456, 2013-1-1, 2
1, blah, 123, 2013-2-1, 3234, 456, 2012-12-1, 332111
1, blah, 123, 2013-2-1, 3234, 456, 2012-11-1, 5432
1, blah, 123, 2013-2-1, 3234, 456, 2012-10-1, 555
とにかく、4番目のテーブルに参加すると重複を防ぐことができますか? 3 番目と 4 番目を入れ替えても同じように機能します。
助けてくれてありがとう!
*編集/回避策*
私が感じているのは、これを行うには不格好な方法であることがわかりました。私はそれが機能することを知っているので、答えとして投稿しています。しかし、誰かがこれを行うためのより良い方法を知っている場合は、それを受け入れられた回答としてマークします。
「日」という新しいテーブルを追加します
データ:
day_id, dateYMD, dateUS, dateEU, dayName
1, 1970-01-01, 01/01/1970, 01/01/1970, Thursday
2, 1970-01-02, 01/02/1970, 02/01/1970, Friday
3, 1970-01-03, 01/03/1970, 03/01/1970, Saturday
. . .
. . .
. . .
735322, 2013-03-30, 03/30/2013, 30/03/2013, Saturday
735323, 2013-03-31, 03/31/2013, 31/03/2013, Sunday
735324, 2013-04-01, 04/01/2013, 01/04/2013, Monday
次に、クエリを次のように変更しました。
select table1.did, table2.vname, date_format(days.dateYMD, '%Y-%m-01') as daysYMD, table3. . ., table4. . .
from table 1
join days on days.dateYMD > now() - interval 1 year and days.dateYMD <= now()
join table 2 on table2.vid = table1.vid
join table 3 on table3.sid = table1.sid and table3.date = date_format(days.dateYMD, '%Y-%m-01')
join table 4 on table4.cid = table1.cid and table4.date = date_format(days.dateYMD, '%Y-%m-01')
where table1.did = 1
group by daysYMD
;
繰り返しますが、これでうまくいきました-しかし、誰かがそれを行うためのより良い方法を知っているかどうか疑問に思っています。
ありがとう!