我有一個相當複雜的select語句。然而,我有一個列,比如說日期和一個名爲title的列,然後我想要一個計數器(如果日期與前一個日期不相等,則遞增),計數結果集中的每一天,當計數器達到10時我希望SQL語句返回10個第一個日期的結果集。限制select語句返回的行的計數器
日期只是我的問題的類比;重要的部分是我的櫃檯。
編輯:
這是我真正的問題:
我想與他們的最新消息和時間相處了10第一次談話。我希望sql也檢索對話中的邀請(我通過添加具有相同conversationId latestMessage的行以及具有不同的profileId值的時間來完成此操作,之後我將這些邀請分組到JAVA代碼中)。我有一個名爲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: 我已經在我的查詢刪除了論壇發言。上面有一個問題,那就是列中的值都不相同。正如我所說的:
希望與他們的最新消息和 時間相處的10個第一次談話 。我想在SQL檢索邀請 在交談過(我做 這被後來與 簡檔,我組的邀請在Java代碼中的每個 談話的不同值一起添加具有相同 的conversationId latestMessage行時間 )
但是profileId也不是很明顯(我的意思是在每個對話中都是不同的,但用戶可以被邀請參加很多對話)。問題是如何以簡單的方式添加總是有不同值的列?所以我可以把櫃檯分組?
什麼數據庫?你知道有差異。例如,在MySQL中你會使用LIMIT,而在SQL Server中你使用TOP。 – 2011-03-15 01:54:42
woho - 你能列出一些示例行和預期結果嗎? – RichardTheKiwi 2011-03-15 02:25:53