当前位置: 首页 > 面试题库 >

SQL Server:如何模仿oracle保持density_rank查询?

关飞翼
2023-03-14
问题内容

我有一个Oracle查询

select max(m.id),
       m.someId keep (DENSE_RANK FIRST ORDER BY m.UpdateDate desc) 
from MyTable m 
groupBy m.someId

对于这样的数据:

id UpdateDate someId
1  20-01-2012 10
2  20-01-2012 10
3  01-01-2012 10
4  10-02-2012 20
5  01-02-2012 20
6  01-04-2012 30

会完全返回我:

2 10
4 20
6 30

因此,对于每个someId,它都会搜索最新的updateDate并确实返回相应的id。(如果最新日期有多个ID,则采用最新ID)。

但是对于SQL Server,此查询将以相同的方式工作吗?我是说这个建筑keep (dense_rank first order by ..)


问题答案:

我认为您的特定查询不会运行SQL Server。但是您可以通过执行以下操作获得相同的结果:

SELECT id, SomeId
FROM (  SELECT *, ROW_NUMBER() OVER(PARTITION BY someId ORDER BY UpdateDate DESC, id DESC) Corr
        FROM MyTable) A
WHERE Corr = 1


 类似资料:
  • 本文向大家介绍详解SQLServer和Oracle的分页查询,包括了详解SQLServer和Oracle的分页查询的使用技巧和注意事项,需要的朋友参考一下 不管是DRP中的分页查询代码的实现还是面试题中看到的关于分页查询的考察,都给我一个提示:分页查询是重要的。当数据量大的时候是必须考虑的。之前一直没有花时间停下来好好总结这里。现在又将Oracle视频中关于分页查询的内容看了一遍,发现很容易就懂了

  • 问题内容: 有没有像MySQL中的任何功能和像甲骨文和其他DBMS提供的? 我想在查询中生成一个ID,但是在MySQL中这些功能不存在。还有其他选择吗? 问题答案: Mysql没有它们,但是您可以使用使用用户定义的变量的以下表达式进行模拟: 像这样: 但是如果您要重用该会话,它将仍然被设置,因此您需要像这样重置它: 参见SQLFiddle。 可能,但是火车残骸;我建议在应用程序层处理该要求。

  • 问题内容: 连接到MS SQL Server的应用程序将创建视图,在该视图中将对单行结果进行分析,包括1-10k条记录的聚合。整个结果视图中的适用标准将具有数十至数万个结果。然后,将按视图中的某些列(用户指定的)对视图+条件进行排序,这些列最有可能是聚合的列。当使用聚合列进行排序时,预计响应时间会迅速下降。 不久前,使用实例化视图可以很容易地解决此问题(在Oracle 9i中)。有关如何在MS S

  • 问题内容: 我们将进行并行测试,以将旧系统与新的闪亮版本进行比较。我们有一个Oracle数据库表A,用于存储遗留系统的数据,以及一个等效表B,用于存储新系统的数据,因此在测试期间,该数据库将被非规范化。(此外,旧版系统和表A是固定的- 不允许更改) 我想做的是允许A上不常见的DML操作传播到B,反之亦然。我从一对触发器开始,但是遇到了一个明显的问题,即当触发器运行时,表正在变异,并引发异常。 是否

  • 问题内容: 如何将结果集限制为给定列的 n个 不同值,其中实际行数可能更高? 输入表: 所需的输出,其中limit different = 5个client_id的不同值: 该平台旨在用于MySQL。 问题答案: 您可以使用子选择

  • 问题内容: 我有一些最初存储在通用Javascript对象中的数据,其ID为键: 但是,我发现浏览器在循环浏览时并不能保证特定的对象顺序,因此在上面的“ 3”将出现在“ 7”之前。我改用这样的数组格式: 现在,我可以按正确的顺序循环,但是不能进行快速查找,例如,不必循环遍历数组。 是否有结合两种方法的好方法?我宁愿避免为每种格式使用单独的对象,因为该对象非常大(数百个元素)。 问题答案: 我也遇到