У меня есть оператор select, который довольно сложный. Тем не менее, у меня есть столбец, допустим, дата и столбец с названием title, тогда мне нужен счетчик (он увеличивается, если дата не равна предыдущей дате), которые подсчитывают каждый день в наборе результатов, когда счетчик достигает 10. Я хочу, чтобы оператор SQL чтобы вернуть набор результатов для 10 первых дат.Счетчик, который ограничивает строки, возвращаемые оператором select
Даты - это просто аналогия с моей проблемой; важная часть - мой счетчик.
EDIT:
Вот моя реальная проблема:
Я хочу, чтобы получить 10 первый разговор вместе со своим последним сообщением и времени. Я хочу, чтобы sql также получал приглашение в разговоре (я делаю это, добавляя строки с одинаковым тегом talkId lastMessage и временем вместе с различными значениями profileId. Я группирую приглашенных для каждого разговора в JAVA-коде позже). У меня есть одна таблица с именем convers_invited и другая таблица, называемая сообщениями разговора. В table_messages table у меня есть столбцы, такие как talkId, profileId, messageBody, timeStamp и т. Д. И в таблице chat_invited только column talkId и 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, чтобы получить пригласил в разговоре тоже (я это путь добавления строк с такими же conversationId latestMessage и времени наряду с различными значениями ProfileID. I группы предлагаются каждый разговора в JAVA коде позже)
Но profileId тоже не отличается (я имею в виду разные в каждом разговоре, но пользователю может быть предложено много разговоров). Вопрос в том, как я могу добавить столбец, который всегда имеет различные значения в простой форме? Чтобы я мог сгруппировать счетчик?
В какой базе данных? Знаете, есть различия. Например, в MySQL вы должны использовать LIMIT, а в SQL Server вы используете TOP. –
woho - можете ли вы рассказать о некоторых примерах строк и ожидаемом результате? – RichardTheKiwi