【问题标题】:TOP 2 of paired columns in SQLSQL 中成对列的 TOP 2
【发布时间】:2023-04-10 23:06:01
【问题描述】:
 PortPair   caspid  por POD teu ton
  P1-P2        5    P1  P2  9   5000
 P3-P4         5    P3  P4  10  5500
 P1-P2         4    P1  P2  7   4000
 P1-P2         3    P1  P2  5   3000
 P3-P4         3    P3  P4  6   3500
 P3-P4         2    P3  P4  7   4500
 P1-P2         1    P1  P2  3   2500

这里我有一张桌子,我只想得到每个 PortPair 前 2 条记录的输出。 输出如下所示

 Por    pod PortPair caspID  teu     ton
  P1    P2  P1-P2     5        9    5000
  P1    P2  P1-P2     4        7    4000
  P3    P4  P3-P4     5       10    5500
  P3    P4  P3-P4     3        6    3500

不知道如何查询我的输出表..

谁能帮忙

【问题讨论】:

  • 您想如何处理领带?如果#2 和#3 都有 4000 吨,应该显示哪个?两个都?随机?
  • 以后,请考虑不要标记您不需要支持的 SQL Server 版本。
  • 感谢您的建议 Joachim Isaksson.. 我是新来的人

标签: sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2


【解决方案1】:

试试这个

;WITH cte AS
(
   SELECT 
       ROW_NUMBER() OVER(PARTITION BY PortPair ORDER BY CASPID DESC ) AS rno,
       Por  ,  
       pod, 
       PortPair, 
       caspID , 
       teu   ,  
       ton
   FROM tableName
}

SELECT Por  ,  pod, PortPair, caspID , teu   ,  ton
FROM cte 
WHERE rno<=2

这里我们是partitioning,基于您的pairordering,基于正确的列以降序排列。这样我们就可以选择前 2 对。

【讨论】:

  • 我认为 SQL Server 2000 做不到 ROW_NUMBER()
  • 它被标记到 sql server 2008 和 r2 也
  • 当我修改您的查询时,我得到了解决方案...... SELECT Por, pod, PortPair, caspID, teu, ton FROM (SELECT ROW_NUMBER() OVER ( PARTITION BY PortPair ORDER BY CASPID DESC ) AS 'RowNumber', Por, pod, PortPair, caspID , teu, ton FROM #tempcasp )T WHERE RowNumber
  • 好的。我对分区和配对不太了解。那是y。无论如何,我会更新 mu 答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多