SQL Server 支持Common Table Expression
和Windowing Function
. 查询使用DENSE_RANK()
根据最大Paid
为每个给出排名值Account
。所以第一个值是最大值,排名值为1
。这是您要过滤的值。
假设链接两个表的列是Client
WITH record
AS
(
SELECT a.Client, a.Account, b.Paid, b.Date,
DENSE_RANK() OVER (PARTITION BY a.Client ORDER BY b.Paid DESC) rn
FROM Customer a
INNER JOIN Data b
ON a.Client = b.Client
)
SELECT Client, Account, Paid, Date
FROM record
WHERE rn = 1
考虑以下记录(来自SQLFiddle Demo)
客户表
╔════════╦═════════╗
║ CLIENT ║ ACCOUNT ║
╠════════╬═════════╣
║ 1 ║ Stack ║
║ 2 ║ Over ║
║ 3 ║ Flow ║
╚════════╩═════════╝
数据表
╔════════╦══════╦════════════════════════════════╗
║ CLIENT ║ PAID ║ DATE ║
╠════════╬══════╬════════════════════════════════╣
║ 1 ║ 123 ║ January, 01 2013 00:00:00+0000 ║
║ 1 ║ 234 ║ January, 02 2013 00:00:00+0000 ║
║ 1 ║ 33 ║ January, 03 2013 00:00:00+0000 ║
║ 2 ║ 674 ║ January, 04 2013 00:00:00+0000 ║
║ 2 ║ 2424 ║ January, 05 2013 00:00:00+0000 ║
║ 2 ║ 4545 ║ January, 06 2013 00:00:00+0000 ║
║ 3 ║ 22 ║ January, 07 2013 00:00:00+0000 ║
║ 3 ║ 3456 ║ January, 08 2013 00:00:00+0000 ║
║ 3 ║ 445 ║ January, 09 2013 00:00:00+0000 ║
╚════════╩══════╩════════════════════════════════╝
连接表的结果
╔════════╦═════════╦══════╦════════════════════════════════╗
║ CLIENT ║ ACCOUNT ║ PAID ║ DATE ║
╠════════╬═════════╬══════╬════════════════════════════════╣
║ 1 ║ Stack ║ 123 ║ January, 01 2013 00:00:00+0000 ║
║ 1 ║ Stack ║ 234 ║ January, 02 2013 00:00:00+0000 ║ << Expected Output
║ 1 ║ Stack ║ 33 ║ January, 03 2013 00:00:00+0000 ║
║ 2 ║ Over ║ 674 ║ January, 04 2013 00:00:00+0000 ║
║ 2 ║ Over ║ 2424 ║ January, 05 2013 00:00:00+0000 ║
║ 2 ║ Over ║ 4545 ║ January, 06 2013 00:00:00+0000 ║ << Expected Output
║ 3 ║ Flow ║ 22 ║ January, 07 2013 00:00:00+0000 ║
║ 3 ║ Flow ║ 3456 ║ January, 08 2013 00:00:00+0000 ║ << Expected Output
║ 3 ║ Flow ║ 445 ║ January, 09 2013 00:00:00+0000 ║
╚════════╩═════════╩══════╩════════════════════════════════╝
最终输出
╔════════╦═════════╦══════╦════════════════════════════════╗
║ CLIENT ║ ACCOUNT ║ PAID ║ DATE ║
╠════════╬═════════╬══════╬════════════════════════════════╣
║ 1 ║ Stack ║ 234 ║ January, 02 2013 00:00:00+0000 ║
║ 2 ║ Over ║ 4545 ║ January, 06 2013 00:00:00+0000 ║
║ 3 ║ Flow ║ 3456 ║ January, 08 2013 00:00:00+0000 ║
╚════════╩═════════╩══════╩════════════════════════════════╝