2

こんにちは、私はこのような2つのテーブルを持っています -

Event
id   title
1    'Test 1'
2    'Test 2'
3    'Test 3'

and Schedule
id  event_id   price   event_date
1      1         100    2013-04-15
2      1         150    2013-04-20
3      2         80     2013-04-18
4      3         120    2013-04-26
5      3         140    2013-04-22
6      2         100    2013-04-22

次のようなイベントが必要です - event_date ASC で並べ替えられた一意のイベント

e.id   e.title   s.price   s.event_date
1       Test 1    100       2013-04-15
2       Test 2    80        2013-04-18
3       Test 3    140       2013-04-22

私はこのようにクエリを試みました -

SELECT e.id, 
       e.title, 
       s.price, 
       Min(s.event_date) AS min_start 
FROM   events AS e 
       JOIN schedules AS s 
         ON ( e.id = s.event_id ) 
GROUP  BY s.event_id; 

次に、前のクエリの結果セットを繰り返してイベントを再度クエリします。しかし、これはクエリが多すぎます。また、正確な価格がわかりません。上記の結果を達成するための最良の方法は何ですか? ありがとう

4

5 に答える 5

2

問題を解決するための解決策はたくさんあります。event_date私がそれを行っていたものの1つは、すべての最初のサブクエリを取得する別のサブクエリを使用することですevent_ID。次に、結果が他のテーブルに結合されて、他の列が取得されます。

SELECT  a.ID, a.Title,
        b.Price, b.Event_date
FROM    `Event` a
        INNER JOIN `Schedule` b
            ON a.ID = b.event_ID
        INNER JOIN
        (
            SELECT  event_ID, MIN(event_date) min_date
            FROM    `Schedule`
            GROUP   BY event_ID
        ) c ON b.event_ID = c.event_ID AND
                b.event_date = c.min_date

出力

╔════╦════════╦═══════╦══════════════════════════════╗
║ ID ║ TITLE  ║ PRICE ║          EVENT_DATE          ║
╠════╬════════╬═══════╬══════════════════════════════╣
║  1 ║ Test 1 ║   100 ║ April, 15 2013 00:00:00+0000 ║
║  2 ║ Test 2 ║    80 ║ April, 18 2013 00:00:00+0000 ║
║  3 ║ Test 3 ║   140 ║ April, 22 2013 00:00:00+0000 ║
╚════╩════════╩═══════╩══════════════════════════════╝

2 つの列のみに関心がある場合、最も簡単な方法は次のとおりです。

于 2013-04-15T15:03:40.027 に答える
0
SELECT   s.title, a.event_id, a.price, a.event_date
  FROM schedule a JOIN event s ON a.event_id = s.ID
 WHERE a.event_date = (SELECT MIN (b.event_date)
                         FROM schedule  as b
                        WHERE b.event_id = a.event_id)
 ORDER BY a.event_id ASC
于 2013-05-15T10:16:05.070 に答える
0

複雑に見えますが、どちらかというとシンプルです

select * from 

    (select 
           event.id,
           event.title,
           schedule.event_date,
           schedule.price,
           event_id 
    from schedule 
    left join event on event.id=schedule.event_id 
    group by event_date,event_id
    )s

group by s.event_id;
于 2013-12-11T06:05:35.643 に答える
0

b ON a.id = b.event_id order by b.event_id desc ;event内部結合から a.id、a.title、b.price、b.event_date を選択します 。schedule

于 2014-09-24T05:18:05.730 に答える
0

ビューを作成し、そこから選択できます。

CREATE VIEW scheduleview AS select * from schedule group by event_date,event_id;
select * from scheduleview group by event_id;
于 2013-12-10T10:11:36.493 に答える