を使用してテーブルの一意/別個の行を選択してください。実際には、質問として一意になる適切なタイトルはわかりません。私を信じて、inner join
、union
、distinct
について検索するために最善の努力をしました。特定の条件を持つが、GROUP BY
私は、1つのテーブルのみを持っており、それは次のようになります。
ID | ITEM | MESSAGE_INFO | PARENT_ID | IS_CLOSED | IS_APPROVAL
1 | A123 | test 1 | null | 1 | 1
2 | A123 | reply to.. | 1 | null | null
3 | A123 |another reply.| 1 | null | null
4 | B456 | test 2 | null | null | 1
5 | A123 | new test 1 | 1 | null | 1
6 | C789 | test 3 | null | 2 | 1
7 | C789 | reply to 3 | 6 | null | null
注:原作者から
- メッセージは
1
列とPARENT_ID
IS_APPROVAL
になりますnull
ことですこれが送信された元のメッセージであることを意味します。IS_CLOSED
は、会話がまだ開いている場合は1
、元の投稿者が返信できなくなった場合は2
となります。null
これは受信者がまだメッセージを開いていないことを意味します。 PARENT_ID
には、メッセージが返信しているID
が含まれます。原作者へ- メッセージの返信は
IS_CLOSED
列
でnull
を持つことになります今、私が何をしたいのか、私には、各項目の原作者から最新のメッセージを取得したいです。私はこのクエリを試してみました
ID | ITEM | MESSAGE_INFO | PARENT_ID | IS_CLOSED | IS_APPROVAL
5 | A123 | new test 1 | 1 | null | 1
4 | B456 | test 2 | null | null | 1
:だから、期待される結果は、このようなものです
SELECT *
FROM TABLE
WHERE IS_APPROVAL = 1
AND (
IS_CLOSED IS NULL
OR IS_CLOSED < 2
)
GROUP BY ITEM
ORDER BY ID DESC;
しかし、私は取得していた結果がこれです:
ID | ITEM | MESSAGE_INFO | PARENT_ID | IS_CLOSED | IS_APPROVAL
1 | A123 | test 1 | null | 1 | 1
4 | B456 | test 2 | null | null | 1
'SELECT *'は 'GROUP BY'と組み合わせることはできません。無効なSQLです。 MySQLはバージョン5.7.5よりも前のバージョンを受け付けていますが、[列挙されている](https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html)、 'GROUP BY'節には現れません。 – axiac
[MySQL](https://dev.mysql.com/doc/refman/5.7/en/)および[SQL Server](https://docs.microsoft.com/en-us/sql/t-sql/)言語参照)は、異なる企業によって作成された無関係の異なるソフトウェアパッケージです。正しいタグを使用してください。 – axiac
ヘッドアップありがとう。私はsql-serverは文字どおりサーバーを意味し、SQLクエリであると考えていました。私は質問を入力していた間にそれは自動的に追加されたので、私はそれを削除することを考えなかった。 – threeFatCat