|
помогите написать запрос или подскажите где почитать
|
|||
---|---|---|---|
#18+
есть таблица CREATE TABLE [dbo].[Tournament]( [Player_ID] [int] NOT NULL, [Game_ID] [int] NOT NULL, [Points] [int] NOT NULL, [Date] [date] NOT NULL, [Period_ID] [int] NOT NULL ) ON [PRIMARY] как выбрать первые 3 места по играм Game_ID на заданные Date и Period_ID то есть количество баллов может быть одинаковым скажем у двух победителей Game_ID = 0 например 11 Player_ID 4607, 4611 ещё как выбрать места у Player_ID скажем 4607 по всем Game_ID из первых трёх мест, то есть допусти Game_ID = 0 первое место, Game_ID = 1 не попал в тройку лучших? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 13:48 |
|
помогите написать запрос или подскажите где почитать
|
|||
---|---|---|---|
#18+
Какие запросы пробовали? что не получилось? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 13:51 |
|
помогите написать запрос или подскажите где почитать
|
|||
---|---|---|---|
#18+
Ролг Хупин Какие запросы пробовали? что не получилось? Не видишь, чтоле? Запрос на форум. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 14:00 |
|
помогите написать запрос или подскажите где почитать
|
|||
---|---|---|---|
#18+
Ролг Хупин, select [Player_ID], [Points] from Tournament as t where Points = ( select MAX([Points]) from Tournament where [Game_ID] = 0 and [Date] = '2021-10-04' and [Period_ID] = 0 ) and [Game_ID] = 0 and [Date] = '2021-10-04' and [Period_ID] = 0 вот так например могу получить первые места, потом если полученный Points использовать в where и < условие, то получится второе место, лучше как написать не знаю, но уже не здорово что много запросов. может функцию или процедуру использовать, но не знаю как вывести результат ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 14:05 |
|
помогите написать запрос или подскажите где почитать
|
|||
---|---|---|---|
#18+
dsalodki как выбрать первые 3 места по играм Game_ID на заданные Date и Period_ID то есть количество баллов может быть одинаковым скажем у двух победителей ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 14:06 |
|
помогите написать запрос или подскажите где почитать
|
|||
---|---|---|---|
#18+
Akina, желательно вернуть номер места , то есть если Допустим, у первых двух и у вторых двух количество баллов одинаково то n столбец равен 1 для первых двух, для вторых двух n=2 , но row_number я использовал в оконной функции, оно считает как 1,2 для первых двух with cte as ( select Player_ID, Points, row_number() over (partition by Player_ID order by Points desc) as n from Tournament where Game_ID = 0 AND [Date] = '2021-10-04' AND Period_ID = 0 ) select top (10) n, Player_ID, Points from cte where n <= 3 order by Points desc; то есть это не правильно наверное нужно писать три запроса для первых трёх мест, нашёл первое и количество Points потом второе по MAX(Points) , но Points < @Points1stPlase и так далее ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 14:14 |
|
помогите написать запрос или подскажите где почитать
|
|||
---|---|---|---|
#18+
dsalodki ... наверное нужно писать три запроса для первых трёх мест, нашёл первое и количество Points потом второе по MAX(Points) , но Points < @Points1stPlase и так далее наверное нужно прочитать про groub by и Join, например, left ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 14:22 |
|
помогите написать запрос или подскажите где почитать
|
|||
---|---|---|---|
#18+
Gerasimenko dsalodki ... наверное нужно писать три запроса для первых трёх мест, нашёл первое и количество Points потом второе по MAX(Points) , но Points < @Points1stPlase и так далее наверное нужно прочитать про groub by и Join, например, left ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 14:26 |
|
помогите написать запрос или подскажите где почитать
|
|||
---|---|---|---|
#18+
Gerasimenko, USE [dogs_new] GO /****** Object: StoredProcedure [dbo].[GetBestResults] Script Date: 10/11/2021 3:30:05 PM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= ALTER PROCEDURE [dbo].[GetBestResults] -- Add the parameters for the stored procedure here @date date, @period_id int AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here declare @t table(place int, Game_ID int, Player_ID int, Points int) declare @max_points int = 0 DECLARE @game_ID INT SET @game_ID=0 WHILE ( @game_ID <= 10) BEGIN set @max_points = (select MAX([Points]) from Tournament where [Game_ID] = @game_ID and [Date] = @date and [Period_ID] = @period_id) if @max_points is not null begin -- 1st place insert into @t (place, Game_ID, Player_ID, Points) select 1, @game_ID, [Player_ID], [Points] from Tournament where Points = @max_points and [Game_ID] = @game_ID and [Date] = @date and [Period_ID] = @period_id -- 2nd place set @max_points = (select MAX([Points]) from Tournament where [Game_ID] = @game_ID and [Date] = @date and [Period_ID] = @period_id and Points < @max_points) if @max_points is not null begin insert into @t (place, Game_ID, Player_ID, Points) select 2, @game_ID, [Player_ID], [Points] from Tournament where Points = @max_points and [Game_ID] = @game_ID and [Date] = @date and [Period_ID] = @period_id -- 3d place set @max_points = (select MAX([Points]) from Tournament where [Game_ID] = @game_ID and [Date] = @date and [Period_ID] = @period_id and Points < @max_points) if @max_points is not null begin insert into @t (place, Game_ID, Player_ID, Points) select 2, @game_ID, [Player_ID], [Points] from Tournament where Points = @max_points and [Game_ID] = @game_ID and [Date] = @date and [Period_ID] = @period_id end end end SET @game_ID = @game_ID + 1 END select * from @t END короче у меня такое решение, может можно сделать лучше ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 15:30 |
|
помогите написать запрос или подскажите где почитать
|
|||
---|---|---|---|
#18+
dsalodki, допилишь до нужного, ибо я не до конца вкурил, что тебе нужно и писал на коленке этот говнокод Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 16:09 |
|
помогите написать запрос или подскажите где почитать
|
|||
---|---|---|---|
#18+
dsalodki Gerasimenko, короче у меня такое решение, может можно сделать лучше можно если понят, что надо получить в итоге. приложите данные и ожидаемый результат как вариант Код: sql 1. 2. 3. 4. 5. 6. 7.
и второй вопрос авторещё как выбрать места у Player_ID скажем 4607 по всем Game_ID из первых трёх мест, то есть допусти Game_ID = 0 первое место, Game_ID = 1 не попал в тройку лучших? Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 16:16 |
|
помогите написать запрос или подскажите где почитать
|
|||
---|---|---|---|
#18+
HandKot, скорее так авторselect top 3 * from #Tournament t1 where Game_ID = @Game_ID AND Date = @Date AND Period_ID = @Period_ID order by Game_ID, Date, Period_ID, Points DESC но опять же, совершенно не понятно, что хочет ТС ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 16:24 |
|
помогите написать запрос или подскажите где почитать
|
|||
---|---|---|---|
#18+
Gerasimenko HandKot, скорее так авторselect top 3 * from #Tournament t1 where Game_ID = @Game_ID AND Date = @Date AND Period_ID = @Period_ID order by Game_ID, Date, Period_ID, Points DESC но опять же, совершенно не понятно, что хочет ТС скорее так Код: sql 1. 2. 3. 4.
но опять же, совершенно не понятно, что хочет ТС ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 16:25 |
|
помогите написать запрос или подскажите где почитать
|
|||
---|---|---|---|
#18+
Gerasimenko Gerasimenko HandKot, скорее так пропущено... но опять же, совершенно не понятно, что хочет ТС скорее так Код: sql 1. 2. 3. 4.
но опять же, совершенно не понятно, что хочет ТС order by Points DESC ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 16:26 |
|
|
start [/forum/topic.php?fid=46&msg=40103582&tid=1684212]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 270ms |
0 / 0 |