我想获取表中每条记录的最小日期,该表具有多个带有一个主键的日期条目。看看我的桌子:
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
我想要得到这样的结果:
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
我想获取表上记录的每个 CaseNo 的最短日期。我尝试了这段代码:
Select
CaseNo,Entry_date, Min(Entry_date) as Min_date
from mytable group by CaseNo
结果是这样的:
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
该代码删除没有最小日期的行。我想显示所有记录,其最小日期为Min_date
.
您可以使用 CTE 或子查询来解决它。 CTE具有更好的性能。
子查询版本
SELECT
CaseNo,
Entry_date,
(SELECT MIN(Entry_date) FROM Cases subc WHERE subc.CaseNo=c.CaseNo GROUP BY CaseNo) AS MinEntryDate
FROM Cases c;
CTE版本
WITH CasesMinEntryDate(CaseNo, MinEntryDate) AS
(
SELECT CaseNo, MIN(Entry_date) FROM Cases GROUP BY CaseNo
)
SELECT
c.CaseNo,
Entry_date,
MinEntryDate
FROM Cases c
INNER JOIN CasesMinEntryDate cmed ON c.CaseNo=cmed.CaseNo;
http://sqlfiddle.com/#!3/0feee/8 http://sqlfiddle.com/#!3/0feee/8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)