Как вернуть 5 баз данных, 5 строк, две строки с ближайшим верхним значением и две строки с ближайшим нижним значением заданного значения? Например: точки: 22, 25, 27, 30, 20, 22, 23, 42, 15, 18, 28,
Предположим, что заданное значение равно 23,
, поэтому возврат значения будут - 22,22,23,25,27 сортировать по дате изменения. Я использую Django и postgres.
. В настоящее время я отдельно - возвращаю ближайший верхний и нижний 2 ряд.
total_points = user.total_points
# userData = PointLeaderboard.objects.filter(user=user).first()
leaderObj = []
upperRanks = reversed(PointLeaderboard.objects.filter(
Q(total_points__gt=total_points) |
Q(total_points=total_points, pk__gt=user.id)
).order_by('-date_modified', 'total_points')[:2])
for upperRank in upperRanks:
print(upperRank.user.id)
print(upperRank.total_points)
row = {
'username':'',
'email': upperRank.user.email,
'total_points':upperRank.total_points,
'point_difference': '+'+str((upperRank.total_points - total_points)),
'is_current_user':False
}
leaderObj.append(row)
row = {
'username': '',
'email': user.email,
'total_points': total_points,
'point_difference': '0',
'is_current_user': True
}
leaderObj.append(row)
lowerRanks= PointLeaderboard.objects.filter(
Q(total_points__lt=total_points) |
Q(total_points=total_points, pk__lt=user.id)
).order_by('-total_points', 'date_modified')[:2]
for lowerRank in lowerRanks:
row = {
'username': '',
'email': lowerRank.user.email,
'total_points': lowerRank.total_points,
'point_difference': str((lowerRank.total_points - total_points)),
'is_current_user': False
}
leaderObj.append(row)
Но проблема в том, что точка совпадает с несколькими значениями, мне нужно сначала отсортировать по самому старому. Каков будет правильный подход к преодолению этой проблемы?