2013-12-04 2 views
0

Мне нужно получить одну запись каждого пользователя, которая является последней записью в таблице. В таблице содержится несколько записей каждого пользователя.Как получить одиночную запись каждого пользователя в записи sql

select userid, UserNM, UserPMobileNo 
into #user 
from tbUserMaster 
where UserStatus = 1 


select a.userid, a.UserNM, a.UserPMobileNo, SUM(b.uAmount) as [load] 
into #bal 
from #user a 
    left join tbbalance b on a.UserID = b.UserID and b.uAmount = ABS(b.uAmount) 
group by a.UserID, a.UserNM, a.UserPMobileNo 


select distinct u.*, sum(b.pTotalAmt) as [Net Usage] 
into #Sale1 
from #bal u 
    left join tbProcTransactions b on u.UserID = b.pUserID 
    and (b.pMessContent not like '%Failure%' or b.pMessContent != 'Failed') 
group by u.userid, u.UserNM, u.UserPMobileNo, u.[load], b.pCurrentBalance, b.pTotalAmt 


select a.userid, a.UserNM, a.UserPMobileNo, a.[load], (pCurrentBalance + pTotalAmt) as [OB] 
into #OB 
from tbProcTransactions b 
    inner join #bal a on b.pUserID=a.userid 

Здесь я получаю окончательный результат. Я хочу получить общую сумму каждого пользователя.

select a.userid, a.UserNM, a.UserPMobileNo, a.[load], (pCurrentBalance + pTotalAmt) as [OB] 
into #OB 
from tbProcTransactions b 
    inner join #bal a on b.pUserID = a.userid 

Но я получаю 100000 записей, но фактический отчет 4000.

Как я могу получить одну запись для каждого пользователя?

+0

ВЫБРАТЬ ROW_NUMBER() OVER (PARTITION BY USERID ORDER BY YourColumn) как RowNumber –

+0

Когда вы говорите, "последняя запись таблицы", какая таблица это? как вы знаете это конкретно? – laylarenee

+0

@DavidR Последняя запись означает самую последнюю запись пользователя –

ответ

0

Таблица с именем [tbProcTransactions] имеет несколько записей на идентификатор пользователя. Когда вы присоединяетесь к #bal к [tbProcTransactions], каждая запись в #bal соответствует нескольким записям в [tbProcTransactions], что приводит к возврату дополнительных строк.

Чтобы ограничить количество строк, вы должны указать дополнительные критерии в инструкции WHERE. Например:

select a.userid, a.UserNM, a.UserPMobileNo, a.[load], (pCurrentBalance + pTotalAmt) as [OB] 
into #OB 
from tbProcTransactions b 
    inner join #bal a on b.pUserID = a.userid 

-- added code, using a timestamp field. 
-- If there is a possibility of one user having multiple entries on the same timestamp, you will need to also sort by an auto-numbered field. 
-- TODO: change this to the correct DATETIME field name 
WHERE b.timestampfield=(
    SELECT MAX(c.timestampfield) 
    FROM tbProcTransactions c 
    WHERE c.userid=a.userid 
) 
+0

и что делать, если я хочу создать базу данных в datetime. какую дату я выбираю тогда, как я могу это сделать? –

+0

Пересмотренный ответ, чтобы выбрать только запись [tbProcTransactions] с MAX (меткой времени) для каждого пользователя, в результате чего одна строка будет возвращена из этой таблицы. – laylarenee

Смежные вопросы