相关疑难解决方法(0)

获得每组的前1行

我有一张桌子,我希望得到每组的最新条目.这是表格:

DocumentStatusLogs

|ID| DocumentID | Status | DateCreated |
| 2| 1          | S1     | 7/29/2011   |
| 3| 1          | S2     | 7/30/2011   |
| 6| 1          | S1     | 8/02/2011   |
| 1| 2          | S1     | 7/28/2011   |
| 4| 2          | S2     | 7/30/2011   |
| 5| 2          | S3     | 8/01/2011   |
| 6| 3          | S1     | 8/02/2011   |
Run Code Online (Sandbox Code Playgroud)

该表将按降序分组DocumentID并按DateCreated降序排序.对于每一个DocumentID,我想获得最新状态.

我的首选输出:

| DocumentID | Status | DateCreated …
Run Code Online (Sandbox Code Playgroud)

sql t-sql group-by sql-server-2005 greatest-n-per-group

474
推荐指数
12
解决办法
54万
查看次数

SQL Server查询从每个子组中选择1

我有一组数据,需要为每个CON/OWNER/METHOD/MATRIX集提取一条记录.如果存在非空结果,我想要那个.否则,我想要一个COUNT最高的那个.我该如何查询?

CON      OWNER      METHOD      MATRIX  RESULT  COUNT
*CON_1   OWNER_1    METHOD_A    SOLID   NULL    503
CON_1    OWNER_1    METHOD_A    SOLID   NULL    1

*CON_1   OWNER_1    METHOD_A    SOIL    NULL    1305
CON_1    OWNER_1    METHOD_A    SOIL    NULL    699

*CON_2   OWNER_2    METHOD_B    SOLID   290     687
CON_2    OWNER_2    METHOD_B    SOLID   NULL    NULL
CON_2    OWNER_2    METHOD_B    SOLID   450     600

CON_2    OWNER_2    METHOD_B    WATER   NULL    1
*CON_2   OWNER_2    METHOD_B    WATER   400     NULL
Run Code Online (Sandbox Code Playgroud)

为了一个结果,我想只有星号记录,我正在展示每组如何分组.

这是不好的SQL:

select top (1) CON, OWNER, METHOD, MATRIX, RESULT, COUNT
from #TempTable
group by CON, OWNER, METHOD, MATRIX …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2008

5
推荐指数
1
解决办法
1万
查看次数

声明子查询只能返回单个列

我正在浏览Ben Fortas"在10分钟内自学SQL"一书,并且它有灰色框警告:"子查询SELECT语句只能检索单个列.尝试​​返回多个列将返回错误."

事实上,对于RDMS来说,这通常是正确的吗?(请注意,如果这个答案是正确的,则所有数据库都不是这样).

为什么这个世界会是真的?这似乎是一种奇怪的语言限制.查询计算起来很昂贵,并且检索3列的工作在计算上与检索1的工作没有特别的不同(除非您的RDMS存储按列分组而不是按行分组的表).

mysql sql sql-server sqlite postgresql

0
推荐指数
2
解决办法
1395
查看次数