Этот запрос предназначен для конкретных видов спорта - какие изменения я должен внести, чтобы получить результаты всех видов спорта и только топ-3 в каждом из видов спорта
Индивидуальные виды спорта ---- 30 день - - - - - онлайн-пользователи
SELECT RoomId, Name, ISNULL((SELECT COUNT(ChatUserLogId) From ChatUserLog WHERE RoomId = Room.RoomId AND LoggedInTime >= DATEADD(DAY,-30,GETDATE())), 0) TotalUsers, ISNULL((SELECT COUNT(LoggedInUserId) From LoggedInUser WHERE RoomID = Room.RoomID), 0) UserOnline From Room Where Sports = @Sports ORDER BY UserOnline DESC";
Индивидуальные виды спорта ---- 30 день - - - - - всего пользователей
SELECT RoomId, Name, ISNULL((SELECT COUNT(ChatUserLogId) From ChatUserLog WHERE RoomId = Room.RoomId AND LoggedInTime >= DATEADD(DAY,-30,GETDATE())), 0) TotalUsers, ISNULL((SELECT COUNT(LoggedInUserId) From LoggedInUser WHERE RoomID = Room.RoomID), 0) UserOnline From Room Where Sports = @Sports ORDER BY TotalUsers DESC";
Какие изменения я должен внести в запрос для получения результатов всех видов спорта и только топ-3 в каждом из видов спорта?
Данные таблицы
CREATE TABLE [dbo].[Room] ( [RoomID] INT IDENTITY (6666, 1) NOT NULL, [Name] VARCHAR (100) NOT NULL, [Sports] VARCHAR (50) NOT NULL, [CreatedDate] DATETIME DEFAULT (getdate()) NOT NULL, [CreatedBy] VARCHAR (50) NOT NULL, [CreatedUserID] INT NOT NULL, PRIMARY KEY CLUSTERED ([RoomID] ASC) ); CREATE TABLE [dbo].[ChatUserLog] ( [ChatUserLogId] BIGINT IDENTITY (1, 1) NOT NULL, [MId] INT NOT NULL, [RoomId] INT NOT NULL, [LoggedInTime] DATETIME DEFAULT (getdate()) NOT NULL, [LogOutTime] DATETIME DEFAULT (getdate()) NULL, PRIMARY KEY CLUSTERED ([ChatUserLogId] ASC) ); CREATE TABLE [dbo].[LoggedInUser] ( [LoggedInUserID] INT IDENTITY (1, 1) NOT NULL, [MId] INT NOT NULL, [RoomID] INT NOT NULL, [NickName] VARCHAR (50) NOT NULL, [Icon] VARCHAR (MAX) NOT NULL, CONSTRAINT [PK_LoggedInUser] PRIMARY KEY CLUSTERED ([LoggedInUserID] ASC) );
Что я уже пробовал:
Я попробовал 2 левых соединения, но это просто умножает 3 таблицы и дает те же результаты, что и n раз. Так что это не работает. Помогите мне просто изменить это
Herman<T>.Instance
Знаете ли вы о функции Row_Number ()?