現在、作業中の 1 回限りのレポート プロセスのために、以下のようなクエリを実行する必要があります。
ただし、テーブル内の各アイテムには複数の関連付けられた「メッセージ」があり、それらはすべて保存されます。これは、各アイテムが複数回返されることを意味します。以下の例と詳細な説明に従って、各項目を 1 回だけ表示したいと思います。
これは(少なくとも私の意見では)貧弱な構造であることは認識していますが、レポートを作成する必要があり、これがデータの保存方法です:-(
SQL フィドル: http://sqlfiddle.com/#!6/76fce/8
クエリ:
SELECT messageId, receiver, createdDate, itemId from messages_0,items WHERE
itemId IN (1, 2, 3)
AND (receiver = '100' OR receiver = '200')
AND messages_0.description LIKE '%'+items.name+'%'
union all
SELECT messageId, receiver, createdDate, itemId from messages_1,items WHERE
itemId IN (1, 2, 3)
AND (receiver = '100' OR receiver = '200')
AND messages_1.description LIKE '%'+items.name+'%'
注: メッセージ テーブルが 2 つあるため、すべてを結合します。
メッセージの例:
messageId | receiver | createdDate | description
--------------
1 | 100 | 2012/11/27 12:00 | The Dog is awesome
2 | 100 | 2012/11/27 13:00 | Now the Dog is boring
4 | 200 | 2012/11/27 11:30 | I have Wood :-)
アイテム例:
itemID | name
--------------
1 | Dave
2 | Dog
3 | Wood
結果:
messageId | receiver | createdDate | itemId
1 | 100 | 2012/11/27 12:00 | 2
2 | 100 | 2012/11/27 13:00 | 2
4 | 200 | 2012/11/27 11:00 | 3
ただし、各アイテムを一度だけ表示する必要があります。最も古い行(createdDate による)のみが表示されます。
目標結果:
messageId | receiver | createdDate | itemId
1 | 100 | 2012/11/27 12:00 | 2
4 | 200 | 2012/11/27 11:00 | 3
SQL (Sybase) でこれを行うにはどうすればよいですか? これまでのところ、グループ化 (id のみを返す) と何らかのサブクエリの両方を見てきましたが、何も機能させることができませんでした!
SQL フィドル: http://sqlfiddle.com/#!6/76fce/8