How to get minimum date by each records from multiple records

懵懂的女人 提交于 2019-12-20 06:12:29

问题


I would like to get the minimum date of each record in my table having multiple entry of date with one primary key. Take a look at my 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

I want to have this result:

       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

I want to get the minimum date of each CaseNo recorded on my table.

I tried this code:

Select CaseNo,Entry_date, Min(Entry_date) as Min_date
from mytable group by CaseNo

Result is this:

   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

The code remove the row not having the minimum date. I want to display all records with their minimum date as Min_date.


回答1:


try this

SELECT
  CaseNo,
  Entry_date,
  (SELECT MIN(Entry_date) FROM Cases subc WHERE subc.CaseNo=c.CaseNo GROUP BY CaseNo) AS MinEntryDate
FROM Cases c



回答2:


Unsure what RDBMS you're using, but two approaches come to mind.

JOIN against derived table

Create a derived table of (CaseNo, MIN(Entry_date)) rows, and join that against your primary table:

    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;

Use analytic (window) functions

If your RDBMS supports it, you can skip the derived table and ask for your records with the minimum Entry_date by CaseNo provided by the system:

SELECT CaseNo, Entry_date, MIN(Entry_date) OVER (PARTITION BY CaseNo) AS "Min_date"
  FROM tbl;


来源:https://stackoverflow.com/questions/14971794/how-to-get-minimum-date-by-each-records-from-multiple-records

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!