T-SQL获得最大的价值
问题描述:
我有以下查询T-SQL获得最大的价值
SELECT P.ID, MAX(ENTERDATE) as ENTERDATE, MAX(B.CostID) as CostID
FROM Protocol P JOIN BANK B ON P.ID= B.ID
group by P.ID
我需要找出最大enterdate是什么以及相应的CostID但我不希望使用MAX(B.CostID),但我被迫 这样做,因为我有一个P.ID组,所有其他领域需要有某种聚合。我怎么说由P.ID组,并告诉我最大(enterdate),但给我那个Enterdate相应的CostID?
答
SELECT P.ID,
ENTERDATE = MAX(p.ENTERDATE),
CostID = (SELECT CostID FROM Bank WHERE ID = p.ID)
FROM Protocol P
group by P.ID
或类似的东西
SELECT t.*,
CostID
FROM Bank b
JOIN (
SELECT P.ID,
ENTERDATE = MAX(p.ENTERDATE)
FROM Protocol P
group by P.ID
) t ON t.ID = b.ID
答
为什么不子查询它:
SELECT MaxTable.*, BANK.CostID AS CostID
FROM
(
SELECT P.ID, MAX(ENTERDATE) AS ENTERDATE
FROM Protocol P
GROUP BY P.ID
) AS MaxTable
JOIN BANK
ON MaxTable.ID = BANK.ID
+0
为什么你需要在Inner Query(MaxTable)中将'Protocol'加入'Bank'? – Akhil 2012-03-06 18:41:42
+0
哎呀,太多的复制和粘贴:)。固定 – 2012-03-06 18:57:17
答
您可以用解析函数ROW_NUMBER尝试:
SELECT *
FROM
(SELECT p.id, p.enterdate, b.costid,
ROW_NUMBER() OVER(PARTITION BY p.id ORDER BY p.enterdate DESC) AS rownum
FROM Protocol P JOIN BANK B ON P.ID= B.ID)
WHERE rownum = 1
ü可以发布一些示例数据对于这两个表和你想要的o/p? – Teja 2012-03-06 18:37:01
是来自协议表还是银行表的Enterdate? – Taryn 2012-03-06 18:37:39