消费表中查找所有用户最后一条消费记录

BussnissLogs表中字段BussnissLogsID(消费流水ID),UserID(用户ID),HappeningTime(消费时间)
ps:判断最后一条记录的是时间,不是消费流水号

图片说明

查找最后一个条,取BussnissLogsID最大的那个倒序排序
select top 1 * from (select * from xxx order by BussnissLogsID desc)

要的是按时间最末,那么应该是:select top 1 * from BussnissLogs order by HappeningTime desc

先按消费时间倒序排序,然后按用户分组查询就得到每个用户的第一条记录了(即为最新消费记录)
select * from (select * from xxx order by HappeningTime desc) group by UserID

下面的语句考虑了
1. 同一个USERID在同一天可能有多次消费
2. 消费的时间不是随消费流水号递增,就是考虑了消费流水号越大,但是消费时间不是越晚。

SELECT T3.*
FROM BussnissLogs T3
    INNER JOIN (
        SELECT MAX(T1.BussnissLogsID) AS [BussnissLogsID]
            , T1.UserID
        FROM BussnissLogs T1
            LEFT JOIN BussnissLogs T2
            ON T1.UserID = T2.UserID
                AND T1.HappeningTime < T2.HappeningTime
        WHERE T2.UserID IS NULL
        GROUP BY T1.UserID
    ) T4
    ON T3.UserID = T4.UserID
        AND T3.BussnissLogsID = T4.BussnissLogsID

如果不考虑第一种情况,下面的语句就能满足

        SELECT T1.*
        FROM BussnissLogs T1
            LEFT JOIN BussnissLogs T2
            ON T1.UserID = T2.UserID
                AND T1.HappeningTime < T2.HappeningTime
        WHERE T2.UserID IS NULL

如果不考虑第二种情况,下面语句就能满足

SELECT MAX(T1.BussnissLogsID)
    , T1.UserID
    ,  MAX(T1.HappeningTime)
FROM BussnissLogs T1
GROUP BY T1.UserID

select top 1 from Bussinesslog where userId in (selelct userId group by userId ) order by HappingTime desc

select * from BussnissLogs as a where not exists(select 1 from BussnissLogs where UserID=a.UserID and HappeningTime<a.HappeningTime)

你看这样行吗?

select bl.UserID as '用户ID',max(bl.HappeningTime) as '最后一次消费时间' from BussnissLogs as bl group by bl.UserID