Я пытался делать это в SQL около месяца, но, думаю, было бы проще сделать это с .NET linq.
Основы следующие:
Предполагается, что запрос возвращает данные из диапазона дат и возвращает объединенный список имен игроков и времени игроков.
Объединение произошло бы ТОЛЬКО, если бы playEnd
было в течение 30 минут после следующих игроков playStart
.
Итак, если у меня есть такие данные:
Name PlayDate PlayStart PlayEnd
----------------------------------------------------
player1 | 10/8/2018 | 08:00:00 | 09:00:00
player2 | 10/8/2018 | 09:10:00 | 10:10:00
player3 | 10/9/2018 | 10:40:00 | 11:30:00
player4 | 10/11/2018 | 08:30:00 | 08:37:00
player5 | 10/11/2018 | 08:40:00 | 08:50:00
player6 | 10/12/2018 | 09:00:00 | 09:45:00
player7 | 10/12/2018 | 09:50:00 | 10:10:00
player8 | 10/12/2018 | 10:30:00 | 12:20:00
player1
и player2
время воспроизведения будут объединены, например: player1
, player2 = 8:00:00 - 10:10:00 for 10/8/2018
player3
будет просто: player3 = 10:40:00 - 11:30:00 for 10/9/2018
player4
и player5
время воспроизведения будет объединено как: player4
, player5 = 08:30:00 - 08:50:00 for 10/11/2018
player6
и player7
и player8
время воспроизведения будут объединяться следующим образом: player6
, player7
, player8 = 09:00:00 - 12:20:00 for 10/12/2018
Я пытался изменить приведенный ниже запрос разными способами, но я просто не знаю, как сравнить одну строку данных со следующей, а затем объединить две (или более) при необходимости.
var query = from pl in players
select new PlaySession
{
Name = pl.Name,
PlayDate = pl.PlayDate,
PlayStart = pl.PlayStartTime,
PlayEnd = pl.PlayEndTime
};
var grouped = query
.OrderBy(r => r.Name)
.ThenBy(r => r.PlayDate)
.ThenBy(r => r.PlayStart)
Теперь я запутался:
Мне нужно выяснить следующее:
как сравнить PlayDates
различных строк, чтобы убедиться, что они имеют одинаковую дату, например: row1.PlayDate == row2.PlayDate
как сравнить одну строку PlayEnd
со следующими строками PlayStart
, примерно так: row2.PlayStart - row1.PlayEnd < 30 minutes
Есть ли способ сравнить значения по строкам с помощью LINQ?
Спасибо!