AZHAR SAYYAD Ответов: 2

Как выбрать последнюю запись каждого пользователя в SQL


Здравствуйте у меня есть три таблицы в моей базе данных и я хочу выбрать последнюю запись каждого пользователя по userid и packID
предположим, что мои три таблицы выглядят следующим образом table1(UserID, name, contact)
Таблица 2(PackID, Packname)
Таблица 3(PayID, UserID,PackID)
здесь я хочу получить последний payID каждого пользователя, если пользователь выбрал один и тот же пакет два раза, то я хочу запись два раза, например, если значение table3 в первой строке равно (1,1,1), а во второй строке значение равно (2,1,1), то я хочу обе эти две записи. но в моем запросе у меня есть группа по ним с userID поэтому он просто покажет последнюю запись как я могу получить последнюю запись сгруппировав их с userID и PackID

пожалуйста, помогите мне

Что я уже пробовал:

я использовал запрос следите за
выбрать Т1.Идентификатор пользователя,Т2.payID из таблица1 как Т1
внутреннее соединение (выбрать максимум(PayID) как payID,Макс(имя пользователя) имя пользователя из группы таблица3 по ID пользователя) как Т2
на T1.Идентификатор пользователя=Т2.ID пользователя

Suvendu Shekhar Giri

Как решить, что пользователь выбрал одни и те же пакеты 2 раза?
Логика не ясна. Поделитесь некоторыми примерами ввода и вывода в табличной форме, которые могут помочь в понимании вашей проблемы.

2 Ответов

Рейтинг:
1

Ali Majed HA

привет
если вы используете sql-запрос, вы можете
1) OredrByAsc(* fieldName), чтобы показать последнюю запись, firs
2) Выберите top (1), Чтобы выбрать первую запись, введите последнюю

если вы используете Entity Framework:
Вы можете использовать.LastOrDefault(); для получения последнего

надеюсь, это сработает


Рейтинг:
1

Rahul_Biswas

Попробовать это:

;WITH cte1
AS (
	SELECT PAYID
		,USERID
		,PACKID
		,RANK() OVER (
			PARTITION BY USERID ORDER BY PAYID DESC
			) AS Rnk
	FROM table3
	)
	,cte2
AS (
	SELECT PAYID
		,USERID
		,PACKID
	FROM cte1
	WHERE Rnk = 1
	)
	
	SELECT t3.PAYID
		,t3.USERID
		,t3.PACKID
	FROM table3 t3
	INNER JOIN cte2 ON t3.PAYID <= cte2.PAYID
		AND t3.USERID = cte2.USERID
		AND t3.PACKID = cte2.PACKID


Я сделал несколько предположений:
1. PAYID будет увеличиваться по мере добавления все большего количества записей. Другими словами, чем больше PAYID, тем он более свежий. Ваше использование MAX (PAYID), по-видимому, предполагает, что мое предположение верно.
2. Нужно все повторы идентификатор пользователя, комбо PACKID если эти повторы матча идентификатор пользователя, комбо PACKID соответствующий последним PAYID для этого пользователя. Таким образом, может быть более 2 повторений. Вы получите все повторения в моем запросе.