sql server返回重复项

时间:2018-08-20 07:41:14

标签: sql sql-server

我有一个查询,其中我基于值列表从sql服务器中获取结果。现在,我可以通过两种方式做到这一点:

  1. 一次查询一个值并获取前1个结果
  2. 使用where-in子句并发送多个值。

第一种方法的问题是,由于列表中有17000多个值,因此花费了太多时间。第二种方法的问题在于,由于我用于比较的列不是唯一的,因此它会返回重复项。但这大大减少了执行时间。

查询内容如下:

'''SELECT *
FROM dbo.my_table
where AccountID IN {}
ORDER BY dummy_column DESC'''.format(values)

如何使用第二种方法删除那些重复项?还是有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

样本数据和所需结果会有所帮助。但是您可以使用row_number()做您想做的事。这是一个不使用子查询的简单方法:

SELECT TOP (1) WITH TIES t.*
FROM dbo.my_table t
WHERE AccountID IN {}
ORDER BY ROW_NUMBER() OVER (PARTITION BY AccountId ORDER BY dummy_column DESC);

注意:这不会以任何特定方式对结果进行排序。尚不清楚这实际上是否是必需的(假设第一种方法没有这种排序)。