我有一个相当复杂的select语句。但是,我有一个列,让我们说日期,以及一个名为title的列,然后我想要一个计数器(如果日期不等于前一个日期则递增),计算结果集中的每一天,当计数器达到10时我想要SQL语句返回10个第一个日期的结果集。
日期只是我问题的一个类比;重要的是我的柜台。
编辑:
这是我真正的问题:
我希望得到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 ";
更新 我在查询中删除了组语句。我上面有一个问题,那就是列中的值都不是彼此不同的。正如我所说:
希望得到10个第一次谈话 以及他们的最新消息和 时间。我希望sql检索 也在谈话中受到邀请(我知道 这通过添加相同的行 conversationId latestMessage和时间 以及不同的价值观 简档。我将邀请分组给每个人 稍后在JAVA代码中进行对话)
但是profileId也没有区别(我的意思是每个对话都不同,但可以邀请用户进行多次对话)。问题是如何以简单的方式添加始终具有不同值的列?所以我可以把柜台分组?
答案 0 :(得分:0)
查看GROUP BY
和DISTINCT
表达式(与LIMIT
一起使用)。您应该能够使用这些来查找您喜欢的日期;然后,您可能需要将这些作为子查询来检索您喜欢的行(也许其他人会一次性弄清楚如何完成所有操作,或者您可能会这样做。)。
答案 1 :(得分:0)
如果没有更加可靠的信息,很难给出一个非常好的答案,但是你可以选择前10个唯一日期,然后将这些日期内部加入主查询以返回你想要的结果吗?
我在想:
with top_10_unique_dates as (
select top 10 distinct date from
table_whatever
where blah = blah
order by something
)
select * from
table_whatever
where blah = blah
inner join top_10_unique_dates
on table_whatever.date = top_10_unique_dates.date
答案 2 :(得分:0)
答案 3 :(得分:0)
您想要前10个日期的所有标题吗?
select title, date
from yourtable
where date in (
select distinct date
from yourtable
order by date asc
limit 10
)
答案 4 :(得分:-1)
SELECT title, COUNT(DISTINCT date) AS nb
FROM myTable
GROUP BY title
HAVING nb > 10
LIMIT 10