c# - GROUP BY、ORDER BY 并在 LINQ 中排名第一
问题描述
假设我有一个包含两列的表:
TABLE A
-------
ProjectID NUMBER
STATUS VARCHAR2(6) // either 'CLOSED' or 'NEW'
a 最多可以有两个条目,其中ProjectID
有两个可能的值,STATUS
并且组合 ( ProjectID
, STATUS
) 是唯一的。
我只需要选择ProjectID
状态为“新”的那些。此外,如果对于 a projectID
,有两个具有不同状态的条目(NEW 和 CLOSED),我不希望它出现在输出中。
我尝试使用 group by,然后对结果集进行降序排序(以便首先获取项目 ID 的“新”行),然后在 LINQ 中获取第一行,类似于以下内容:
var query = (from a in context.A.Where(o => o.STATUS == 'NEW')
group a by a.ProjectID into groups
select groups.OrderByDescending(o => o.ProjectID)
.ThenBy(o => o.STATUS)
.FirstOrDefault());
但这会导致查询中出现“APPLY” clouse,从而导致错误。显然,Oracle 10g 不支持它。
任何帮助表示赞赏。
解决方案
正确使用having count(distinct STATUS=1)
:
create table tableA( ProjectID int, STATUS varchar2(10) );
insert all
into tableA values(1 ,'NEW')
into tableA values(1 ,'CHANGED')
into tableA values(2 ,'NEW')
into tableA values(3 ,'CHANGED')
select * from dual;
/
select * from
(
select ProjectID, max(STATUS) STATUS
from tableA
group by ProjectID
having count(distinct STATUS)=1
)
where STATUS = 'NEW';
推荐阅读
- python - 使用 Jupyter/IPython 作为轻量级报告生成引擎?
- python - 如何从多个txt文件中删除多个字符
- python - 在有效负载中使用变量
- javascript - 将一个ajax结果数据表到多个表
- react-native - 从不同的堆栈重置堆栈,然后使用 React-Navigation v5 使用参数导航
- python - Conda 包在新创建的环境中发现冲突并且无法显示它们
- json - 如何在 JSON 文件中同时为不同的属性分配相同的值?
- flutter - 为什么我的实现/扩展父类的子类在 Dart Flutter 中没有被识别为父类的子类型?
- flutter - 列出本地文件夹中文件的最简单方法是什么?
- c - 给定目标 x86_64-windows 时 Clang 输出垃圾标签