我有一个相当复杂的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