当前位置: 首页 > 知识库问答 >
问题:

如何使用NHibernate从子查询中选择前X行?

上官霄
2023-03-14

我的问题与我在StackOverflow上看到的其他问题略有不同,所以请不要将此与之前的答案混淆。

我有个疑问

SELECT tab1.Id 
  FROM TABLE1 tab1 
  WHERE tab1.modified_date between to_date('01/04/2013 10:00:00', 'dd/mm/yyyy HH:MI:SS') and to_date('01/04/2013 11:15:00', 'dd/mm/yyyy HH:MI:SS') 
  GROUP BY tab1.Id
  ORDER BY max(tab1.received_date) desc

我想选择前500行,因为Oracle在GROUP和ORDER BY条件(证据)之前处理where子句,所以我必须通过将此查询包装在另一个查询中来选择前500行来实现这一点。

所以,现在我的查询看起来像...

SELECT * 
FROM (SELECT tab1.Id 
  FROM TABLE1 tab1 
  WHERE tab1.modified_date between to_date('01/04/2013 10:00:00', 'dd/mm/yyyy HH:MI:SS') and to_date('01/04/2013 11:15:00', 'dd/mm/yyyy HH:MI:SS') 
  GROUP BY tab1.Id
  ORDER BY max(tab1.received_date) desc ) sub 
WHERE ROWNUM <=500      

这一切都很好,但我正在努力使用QueryOver API将其转换为NHibernate查询。内部查询很简单,例如。

var subquery = QueryOver.Of<Table1>()
            .Select(Projections.Group<Table1>(e => e.Id))
            .....where clause
            .OrderBy(Projections.Max<Table1>(e => e.Received_Date)).Desc

但如何将其包装到select*from子查询中,其中rownum

共有2个答案

牛经赋
2023-03-14

阻止我使用前面答案中建议的Take()方法的问题是由于我的语句的部分顺序。Take()之后正在计算ORDER BY,这意味着返回了错误的500个结果。

我通过创建一个视图来解决这个问题,该视图表示包含ORDER by子句的查询,然后Take()方法在从视图中进行选择时按预期工作。

陈朗
2023-03-14

NHibernate知道如何创建选择前x行的正确查询。

  • HQL和纯SQL查询:查询。SetMax结果(500)
  • Queryover和Linq查询:查询。取(500)
 类似资料:
  • 我刚开始冬眠。我有两张桌子,有一对多的关系。有两个表格: 这是一个父类,它与图像表有一对多关系 现在我想使用父类的id(即:pashminaId)从类中选择一个 如: 选择IMAGE_NAMETBL_IMAGEPASHMINA_ID='some_digit'; 我怎么能在图像类中传递pashminaId,因为没有它只有一个父类的对象创建。 那么,我如何在Hibernate中实现这一点? 谢谢!希望

  • 我已尝试获取以下代码的结果: 在某些情况下,我需要在上面使用“In cause”。我尝试使用获得结果,但对于param:ref它不能在本机查询中工作,但在ejb ql中,我只是得到了以下错误消息: null 我累坏了,大家能给我一些建议吗?thx寻求帮助

  • 问题内容: 如何使用NHibernate进行此查询 我正在使用NHibernate3。 我尝试使用新的Linq提供程序来完成此操作,但未成功。只要它产生上面确切的sql查询,我就不在乎它的执行方式。我希望编写一个强类型查询,如果可能的话,不要使用魔术字符串。 我是NHibernate的新手,所以这个问题可能很简单。 这是更多信息 我将Fluent NHibernate与AutoMappings结合

  • 我试图使用JPA标准编写以下查询,但我无法选择子查询中的多列。 我陷入了下面的实现过程中,无法找到如何在子查询中选择多个列。请看我在代码中的评论(第三行)。 请帮我解决这个问题。

  • 问题内容: 我从查询中得到了结果。 我的简单SQL是: 在Laravel源代码中,我编写了查询: 我得到了想要的结果,但我想以更好的方式编写它。 请告诉我编写此查询的正确和正确的方法。 问题答案: 同时显示此答案以及您的变体:

  • 我必须计算ARPU(收入/#用户),但我得到了这个错误: 子查询使用外部查询第7行的未分组列“usage_records.date”:WHERE created_at<=date_trunc('day',usage_records.d...^) null