我有一张桌子,我希望得到每组的最新条目.这是表格:
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) 我有一组数据,需要为每个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) 我正在浏览Ben Fortas"在10分钟内自学SQL"一书,并且它有灰色框警告:"子查询SELECT语句只能检索单个列.尝试返回多个列将返回错误."
事实上,对于RDMS来说,这通常是正确的吗?(请注意,如果这个答案是正确的,则所有数据库都不是这样).
为什么这个世界会是真的?这似乎是一种奇怪的语言限制.查询计算起来很昂贵,并且检索3列的工作在计算上与检索1的工作没有特别的不同(除非您的RDMS存储按列分组而不是按行分组的表).