如何在SQL中加载最后一条记录 [英] How to load last record in SQL

查看:64
本文介绍了如何在SQL中加载最后一条记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有四个表

i have Four table

tblUser(UserID PK,name)
tblPackage (PackageID  pk, PackageName)
tblPayment(PaymentID Pk,UserID Fk, PackageID FK,Payingdate,PaidAmount,RemainingBalance)
tblsubscription(subID pk, userID, packageID,PackageExpireDate, PackStartDate)





这里假设在我的tblpaymet中我添加了值



Here suppose in my tblpaymet i am adding the value

(1,1,1,2016-11-2,2000,8000),
(2,1,1,2016-11-3,3000,7000),
(3,1,1,2016-11-4,2000,8000)





如果同一个用户拿另一个包



and if same user take another package

(4,1,2,2016-11-1,5000,7000),
(5,1,2,2016-11-2,5000,7000),
(6,1,2,2016-11-3,5000,7000),





在这两个语句中我想通过区分它们来回复每个用户的最后一条记录packageID意味着在我的例子中我想要回溯只有paymentid(3,6),但使用此查询我得到所有记录。所以,请帮助我获取每个用户的最后一条记录



我尝试了什么:





in this both statement i want to retrive the last record of each user by differentiate them packageID means in my example i want to retrive only paymentid(3,6) but using this query i am getting all record. so please help me to get the last record of each user

What I have tried:

select  users.UserID, users.Name, users.Contact, users.photos, pay.PaymentID, pay.Paying_date, pay.Payble, pay.Discount, pay.Total_Paid,p ay.Balance_Remain, pay.Payment_Mode, pay.Payment_Type, pay.Payment_Describtion, pack.PackageID, pack.Package_Name, pack.Package_Duration, pack.Package_Amount, sub.Package_Expire_Date, sub.Package_StartDate from tblUser as users 
	inner join tblPayment as pay 
	on users.UserID=pay.UserId
	left outer join tblPackages as pack
	on pack.PackageID = pay.PackageId
	inner join tblSubscription as sub 
	on users.UserID = sub.UID

推荐答案

这样的事情应该有效:

Something like this should work:
WITH ctePayment As
(
    SELECT
        PaymentID,
        UserID,
        PackageID,
        Paying_date, 
        Payble,
        Discount, 
        Total_Paid,
        Balance_Remain, 
        Payment_Mode, 
        Payment_Type, 
        Payment_Description, 
        ROW_NUMBER() OVER (PARTITION BY UserID, PackageID ORDER BY Paying_date DESC) As RN
    FROM
        tblPayment
)
SELECT 
    users.UserID, 
    users.Name, 
    users.Contact, 
    users.photos, 
    pay.PaymentID, 
    pay.Paying_date, 
    pay.Payble,
    pay.Discount, 
    pay.Total_Paid,
    pay.Balance_Remain, 
    pay.Payment_Mode, 
    pay.Payment_Type, 
    pay.Payment_Description, 
    pack.PackageID, 
    pack.Package_Name,
    pack.Package_Duration, 
    pack.Package_Amount, 
    sub.Package_Expire_Date, 
    sub.Package_StartDate 
FROM
    tblUser As users 
    INNER JOIN ctePayment As pay 
    ON pay.UserId = users.UserID 
    And pay.RN = 1
    INNER JOIN tblSubscription as sub 
    ON sub.UID = users.UserID
    And sub.PackageID = pay.PackageUD
    INNER JOIN tblPackages As pack
    ON pack.PackageID = pay.PackageID
;


这篇关于如何在SQL中加载最后一条记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆