SQL查询仅选择最大值为该列之一的数据

时间:2019-02-25 20:35:08

标签: jquery sql sql-server tsql

对于以下数据,对于相同的实体和别名,我只想选择具有最大BatchID的那些

Entity    Alias      Par      BatchID
35273     1186944    375000   2019022201464730000  -> I want this selected
35273     1186944    375000   2019022123151930000  -> I want this selected
35273     167        27203051 2019022201464730000  
35273     167        20669929 2019022223351340000  -> I want this selected
35273     1949586    650000   2019022123151930000
35273     1949586    650000   2019022201464730000  -> I want this selected
35273     25255      18700    2019022123151930000  -> I want this selected
35273     25255      10700    2019022123151930000  -> I want this selected

这就是我想要的结果:

Entity     Alias       Par        BatchID
35273      1186944     375000     2019022201464730000  
35273      1186944     375000     2019022123151930000
35273      167         20669929   2019022223351340000
35273      1949586     650000     2019022201464730000
35273      25255       18700      2019022123151930000
35273      25255       10700      2019022123151930000

以下查询返回所有记录(而不是仅6条)。

以下查询的结果:“最新”的所有记录均返回1

select * from
(select DENSE_RANK()  over (partition by ENTITY,ALIAS order by batchid desc) 
as latest,*
from test) x
where latest =1

如何创建查询以仅选择那些具有最大BatchID的查询?

编辑: 这是桌子

CREATE TABLE [Test](
   [Entity] [varchar](50) NOT NULL,
   [Alias] [varchar](50) NOT NULL,
   [Par] [bigint] NOT NULL,
   [BatchID] [varchar](50) NOT NULL
) ON [PRIMARY]

即使该查询返回“最新”的全部1,

select DENSE_RANK()  over (partition by ENTITY_ID,SECURITY_ALIAS order by 
batchid desc) as latest,*
from test

谢谢。

3 个答案:

答案 0 :(得分:0)

尝试以下查询。 从TABLE_NAME中选择Entity,Alias,Par,MAX(BatchID)

答案 1 :(得分:0)

这有点猜测,但是您的表将这些列定义为字符串:

[Entity] [varchar](50) NOT NULL,
[Alias] [varchar](50) NOT NULL,

我认为您在字符串中隐藏了字符。

有两种找到它们的方法:

select entity
from test
where try_convert(int, entity) is null and entity is not null;

或:

select alias
from test
where alias like '%[^0-9]%'

我的猜测是,您将找到隐藏的字符,这将解释为什么密集列始终为“ 1”的原因。您的分区没有合并看起来像entity / alias对的分区,因为看不见的字符意味着这对不同。

答案 2 :(得分:0)

我不确定您所期望的结果,但是您可以尝试以下方法:

Select Entity, Alias, max(BatchID)
FROM test T1
GROUP BY Entity, Alias
--HAVING COUNT(Entity) > 1 comment out this one if you want > 1 count rows