Jua*_*ipe 0 sql vb.net greatest-n-per-group
我想获得我的表中每条记录的最小日期,其中包含一个主键的多个日期条目.看看我的桌子:
CaseNo Entry_date
ABC-001 2/12/13
ABC-002 2/09/13
ABC-001 1/01/13
ABC-001 1/31/13
ABC-002 1/01/13
ABC-003 2/01/12
ABC-003 2/18/13
Run Code Online (Sandbox Code Playgroud)
我希望得到这样的结果:
CaseNo Entry_date Min_date
ABC-001 2/12/13 1/01/13
ABC-002 2/09/13 1/09/13
ABC-001 1/01/13 1/01/13
ABC-001 1/31/13 1/01/13
ABC-002 1/09/13 1/09/13
ABC-003 2/01/12 2/01/13
ABC-003 2/18/13 2/01/13
Run Code Online (Sandbox Code Playgroud)
我想得到我桌上记录的每个CaseNo的最小日期.
我试过这段代码:
Select CaseNo,Entry_date, Min(Entry_date) as Min_date
from mytable group by CaseNo
Run Code Online (Sandbox Code Playgroud)
结果如下:
CaseNo Entry_date Min_date
ABC-001 1/01/13 1/01/13
ABC-002 1/09/13 1/09/13
ABC-003 2/01/12 2/01/13
Run Code Online (Sandbox Code Playgroud)
代码删除没有最小日期的行.我想显示最小日期为Min_date的所有记录.
不确定您正在使用哪种RDBMS,但会想到两种方法.
创建(CaseNo,MIN(Entry_date))行的派生表,并将其与主表连接:
SELECT CaseNo, Entry_date, d.Min_date AS "Min_date"
FROM tbl
INNER JOIN ( SELECT CaseNo, MIN(Entry_date) AS "Min_date"
FROM tbl
GROUP BY 1) d
ON tbl.CaseNo = d.CaseNo;
Run Code Online (Sandbox Code Playgroud)
如果您的RDBMS支持的话,你可以跳过派生表,并要求与最低的纪录Entry_date由CaseNo系统提供的:
SELECT CaseNo, Entry_date, MIN(Entry_date) OVER (PARTITION BY CaseNo) AS "Min_date"
FROM tbl;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11013 次 |
| 最近记录: |