获取每组的前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 |
这张表将按DocumentID并按DateCreated按降序排列。每人DocumentID我想知道最新的情况。
我喜欢的输出:
| DocumentID | Status | DateCreated |
| 1 | S1 | 8/02/2011 |
| 2 | S3 | 8/01/2011 |
| 3 | S1 | 8/02/2011 |
是否有任何聚合函数只从每个组中获得顶部?见伪码GetOnlyTheTop下文:
SELECT
DocumentID,
GetOnlyTheTop(Status),
GetOnlyTheTop(DateCreated)
FROM DocumentStatusLogs
GROUP BY DocumentID
ORDER BY DateCreated DESC
如果不存在这样的函数,有什么方法可以实现我想要的输出?
或者首先,这可能是由于数据库不规范造成的吗?我在想,因为我要找的只是一排,是不是status是否也位于父表中?
有关更多信息,请参见父表:
电流Documents表
| DocumentID | Title | Content | DateCreated |
| 1 | TitleA | ... | ... |
| 2 | TitleB | ... | ... |
| 3 | TitleC | ... | ... |
父表是否应该是这样的,这样我就可以轻松地访问它的状态了吗?
| DocumentID | Title | Content | DateCreated | CurrentStatus |
| 1 | TitleA | ... | ... | s1 |
| 2 | TitleB | ... | ... | s3 |
| 3 | TitleC | ... | ... | s1 |
更新我刚刚学会了如何使用“应用”,这使它更容易解决这些问题。
慕码人2483693
慕标琳琳
手掌心
相关分类