0

プログラムのショーを整理するテーブルがあります (すべてのプログラムは複数のショーで実行されます)。それらがプログラムに順序付けられているが時系列であるビューが必要です。

SQL クエリは実際にははるかに長くなりますが、要するに次のとおりです。

SELECT * FROM show_table ORDER BY program, timebegin

結果は次の表のとおりです。

    # show_table

program  |   timebegin     
3399        Do, 01. Nov. 2012 20 Uhr
3399        Fr, 02. Nov. 2012 20 Uhr
3399        Sa, 03. Nov. 2012 20 Uhr
3401        Do, 08. Nov. 2012 20 Uhr
3401        Fr, 09. Nov. 2012 20 Uhr
3401        Sa, 10. Nov. 2012 20 Uhr
3719        So, 04. Nov. 2012 20 Uhr
3739        Mo, 12. Nov. 2012 20 Uhr
3777        So, 04. Nov. 2012 12 Uhr

したがって、プログラム自体は時間順に並べられていますが、次のように順序を少し変えたいと思います。

program  |   timebegin     
3399        Do, 01. Nov. 2012 20 Uhr
3399        Fr, 02. Nov. 2012 20 Uhr
3399        Sa, 03. Nov. 2012 20 Uhr
3777        So, 04. Nov. 2012 12 Uhr
3719        So, 04. Nov. 2012 20 Uhr
3401        Do, 08. Nov. 2012 20 Uhr
3401        Fr, 09. Nov. 2012 20 Uhr
3401        Sa, 10. Nov. 2012 20 Uhr       
3739        Mo, 12. Nov. 2012 20 Uhr

現在、すべてが によって順序付けられてtimebeginいますが、プログラムは傍受されていません。基本的に、私はプログラムではなく、 でソートしたいのですが、timebeginすべてのプログラムをグループ化します。

これは純粋な mySQL で可能ですか、それともサーバー側のロジックを適用する必要がありますか?

4

4 に答える 4

2

次のように実行できます。

SELECT show_table.program, show_table.timebegin
FROM show_table
INNER JOIN (
    SELECT program, MIN(timebegin) AS firsttime
    FROM show_table
    GROUP BY program
) AS groups
ON (show_table.program = groups.program)
ORDER BY groups.firsttime, show_table.program, show_table.timebegin;

基本的に、各プログラム グループの最小値を取得するtimebegin( と呼ばれる) 別のクエリがあり、クエリは元のテーブルに結合されます。firsttime次に、 byfirsttimeでプログラム グループを正しく並べ替え、bytimebeginでプログラム グループ内の行を正しく並べ替えます。それらの間のprogramフィールドはORDER BY、2 つのプログラム グループがたまたま同じ を持っている場合に備えfirsttimeてあるため、その場合はそれらを混在させません。

于 2012-08-22T15:41:39.890 に答える
0

基本的に、私はプログラムではなく、時間の始まりでソートしたいのですが、すべてのプログラムをグループ化します。

これらの要件は互いに矛盾しています。より重要な列を選択する必要があります。最初に並べ替えている間timebegin、プログラムがグループ化されたままになる唯一の方法は、データがたまたまその順序になっている場合です。たとえば、別のプログラムの 2 つのインスタンスの間にプログラム 2 のインスタンスが発生していない場合です。これはやや疑わしい。

于 2012-08-22T14:14:01.003 に答える
0

あなたの望む結果を見て、私はあなたが使うことができると思います

SELECT * FROM show_table 
ORDER BY timebegin, program

開始時刻ごとにすべてのプログラムが必要な場合は、これを試してください

SELECT timebegin, GROUP_CONCAT(program)
FROM show_table 
GROUP BY timebegin
ORDER BY timebegin

GROUP_CONCATの man ページを見てください。

于 2012-08-22T14:09:11.063 に答える
0

試しましたORDER BY timeBegin, programか?timeBeginのデータ型が の場合ははるかに簡単ですDateTime。右?

于 2012-08-22T14:12:21.443 に答える