2

我在这方面一次又一次地挣扎,但无法让它发挥作用。已经在这些论坛上呆了几个小时了……数据集:

行日期 AccountID 列 1    
1 2013 年 2 月 21 日 0:30 A0M8FA1003YP。       
2 2013 年 2 月 21 日 0:30 A0M8FA1003YP。       
3 21/02/2013 0:30 A0M8FA1003YP。       
4 2007 年 9 月 24 日 12:00       
5 2007 年 9 月 24 日 12:00 A0M8FA1003YP。       
6 2007 年 9 月 24 日 12:00       
7 2009 年 12 月 2 日 12:00 A023123332YP。       
8 24/09/2003 12:00 A023123332YP。       
9 24/09/2003 12:00 A023123332YP。       
10 24/09/2003 12:00 A023123332YP。           

我想返回日期列的最大值,但不仅仅是返回单行,而是任何与该最大值匹配的行。即在上面的集合中,我想返回第 1、2、3 和 7 行(这些行的所有列也是如此)。

行日期 AccountID 列 1    
1 2013 年 2 月 21 日 0:30 A0M8FA1003YP。       
2 2013 年 2 月 21 日 0:30 A0M8FA1003YP。       
3 21/02/2013 0:30 A0M8FA1003YP。   
7 2009 年 12 月 2 日 12:00 A023123332YP。       

我有数千行,每个 ACCOUNTID 返回的匹配行数会有所不同,有些是 1,有些是 2,有些是 10。请帮帮我!!!

更新 也试过这个

Select max(ASS_SCH_DATE) over (partition by AccountID), 
       AccountID, 
       ASS_SCH_DATE, 
       ACCOUNTID 
from #Temp3 
order by #Temp3.ACCOUNTID 

结果仍然显示额外的行。

(无列名)ASS_SCH_DATE ACCOUNTID
2013-02-21 00:30:00.000 2013-02-21 00:30:00.000 A0M8FA1003YP
2013-02-21 00:30:00.000 2013-02-21 00:30:00.000 A0M8FA1003YP
2013-02-21 00:30:00.000 2013-02-21 00:30:00.000 A0M8FA1003YP
2013-02-21 00:30:00.000 2007-09-24 12:00:00.000 A0M8FA1003YP
2013-02-21 00:30:00.000 2007-09-24 12:00:00.000 A0M8FA1003YP
4

6 回答 6

8

询问:

SQLFIDDLE示例

SELECT t1.*
FROM Table1 t1
WHERE t1.Date = (SELECT MAX(t2.Date)
                 FROM Table1 t2
                 WHERE t2.AccountID = t1.AccountID)

结果:

| ROW |                            DATE |    ACCOUNTID |
--------------------------------------------------------
|   1 | February, 21 2013 00:30:00+0000 | A0M8FA1003YP |
|   2 | February, 21 2013 00:30:00+0000 | A0M8FA1003YP |
|   3 | February, 21 2013 00:30:00+0000 | A0M8FA1003YP |
|   7 | February, 12 2009 12:00:00+0000 | A023123332YP |
于 2013-06-17T06:09:09.920 回答
1
select * from table where date in (select max(date) from table)
于 2013-06-17T05:33:35.440 回答
0

简单的...

作为“虚拟”你的桌子,我会写:

SELECT dummy.*
FROM
  (
      SELECT MAX(Date) Date, AccountID
      FROM dummy
      GROUP BY AccountID
  ) max_date
    INNER JOIN dummy
    ON(
          dummy.Date      = max_date.Date
      AND dummy.AccountID = max_date.AccountID
    )

或者,使用现代的、更语义化的语法:

WITH max_date(Date, AccountID)
AS
(
  SELECT MAX(Date) Date, AccountID
  FROM dummy
  GROUP BY AccountID
)
SELECT dummy.*
FROM
  max_date
    INNER JOIN dummy
    ON(
          dummy.Date      = max_date.Date
      AND dummy.AccountID = max_date.AccountID
    )
于 2013-06-17T06:38:55.313 回答
0

Windows 功能是您正在寻找的:

Select row,max(date) over (partition by AccountID) As max_date, AccountID, 
Column1 from table where max_date = date;
于 2013-06-17T05:47:09.913 回答
0

尝试这个,

select * from tablename where date in (select max(date) from table group by AccountID)

请参阅sqlFiddle 演示。它给出的输出与您期望的相同。

于 2013-06-17T05:50:21.270 回答
0

尝试使用排名

SELECT  AccountID, 
        ASS_SCH_DATE, 
        RANK() OVER (PARTITION BY ASS_SCH_DATE ORDER BY AccountID) DateRank
FROM YourTable
WHERE DateRank = 1

这样您还可以选择最高排名,第二高等......

于 2013-06-17T06:03:38.837 回答