sql - 查询获取每条记录的最小日期

标签 sql sql-server select

我想获取表中每条记录的最小日期,该表具有多个带有一个主键的日期条目。看看我的 table :

   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

关于sql - 查询获取每条记录的最小日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16208159/

相关文章:

mysql - 检查列中的多个值并返回值 1 或 0

sql-server - 我需要用于数据库单元测试的好工具

sql-server - 获取最新条目的 SQL Server 返回错误结果。我错过了什么?

mysql : Select "variable" as "variable2" from table

sql - 使用 Join 在 SQL Server 中加入 4 个表

sql - 一条语句中包含所有名称的查询表

php - mysql查询为分组数据返回错误

c# - 将大型 SQL 查询移至 Excel

MYSQL JOIN 两个表按日期限制第二个表的结果

mysql - sql select查询返回大写