私はかなり複雑なselect文を持っています。しかし、私は列を持って、日付とタイトルと呼ばれる列を持っている、その後、私はカウンタが10に私はSQL文が欲しいときに、結果セットで毎日カウントするカウンタ(それは、日付が等しい前の日付でない場合は増分したい)最初の10日間の結果セットを返します。select文で返される行を制限するカウンタ
日付はちょうど私の問題の類推です。重要な部分は私のカウンターです。
EDIT:
ここでは私の本当の問題である:
私は彼らの最新のメッセージと、時間とともに10最初の会話を取得したいです。私はsqlが会話の中で招待されたものを取得するようにしたい(私は同じconversationId latestMessageとtimeを持つ行をprofileIdの別の値と共に追加することによってこれを行う。私はconversation_invitedというテーブルと会話メッセージと呼ばれるテーブルを持っています。 conversation_messagesテーブルには、conversationId、profileId、messageBody、timeStampなどのカラムがあり、conversation_invitedテーブルのconversationIdとprofileIdカラムのみがあります。
SELECT M1.conversationId, M1.profileId, profiles.profileMiniature, profiles.firstName, profiles.lastName, M2.lastMessageTime, count(DISTINCT M2.lastMessageTime) AS nb, M3.messageBody AS lastMessage " +
"FROM conversation_invited AS M1 " +
"INNER JOIN (" +
" SELECT conversationId, " +
" max(timeStamp) AS lastMessageTime" +
" FROM conversation_messages " +
" WHERE conversationId in (" +
" SELECT conversationId" +
" FROM conversation_invited " +
" WHERE profileId = ? " +
" ) " +
" GROUP BY conversationId " +
" ) AS M2 " +
"ON M1.conversationId = M2.conversationId " +
"LEFT JOIN conversation_messages AS M3 " +
"ON M2.lastMessageTime = M3.timeStamp " +
"INNER JOIN profiles " +
"ON profiles.profileId = M1.profileId " +
"WHERE M1.profileId <> ? " +
// WHICH COLUMN SHALL I GROUP WITH?
"HAVING nb < 10 " +
"ORDER BY M2.lastMessageTime DESC ";
UPDATE:私は私のクエリでグループ文を削除した 。私は上記の1つの問題があり、それは列の値のどれもが互いに異なっていないということです。私が言ったように:
は、彼らの最新のメッセージと 時間とともに10最初の会話 を取得したいです。私は、SQLが(後でJavaコード内の各 会話に招待 のプロファイルIDの異なる値と一緒に同じ はconversationId latestMessageと時間 で行を追加することによって、私は これ。Iグループ) あまりにも会話に招待を取得したいです
しかし、profileIdは区別されません(各会話では区別されますが、ユーザーは多くの会話に招待できます)。質問は、どうやって簡単な方法で常に異なる値を持つ列を追加できますか?私はカウンターをグループ化することができるように?
どのようなデータベースですか?違いがあります。たとえば、MySQLではLIMITを使用し、SQL ServerではTOPを使用します。 –
woho - いくつかのサンプル行と期待される結果をリストしてください。 – RichardTheKiwi