Search code examples
sqloracle-databasetimestamptop-n

SQL - Selecting the rows with max timestamp by group


I have this table

SITE   S_ID   BAN   COUNT   P       V   TIMESTAMP
23     1       4    1500    0,05    50  10/05/17 09:58:22,609000000
23     3       3    800     0,05    50  10/05/17 09:58:22,736000000
23     2       3    3000    0,05    50  10/05/17 09:58:22,674000000
23     1       4    1500    0,05    50  10/05/17 15:57:04,079000000
23     1       4    1499    0,05    50  10/05/17 15:53:38,851000000
20     1       3    2000    0,1     50  10/05/17 10:57:07,172000000
20     2       3    2000    0,1     50  10/05/17 10:59:50,127000000
20     3       2    3000    0,1     50  10/05/17 11:00:39,051000000
20     4       2    3000    0,1     50  10/05/17 11:01:15,533000000

and I'm trying to obtain something like this:

SITE   S_ID   BAN   COUNT   P       V   TIMESTAMP
23     3       3    800     0,05    50  10/05/17 09:58:22,736000000
23     2       3    3000    0,05    50  10/05/17 09:58:22,674000000
23     1       4    1500    0,05    50  10/05/17 15:57:04,079000000
20     1       3    2000    0,1     50  10/05/17 10:57:07,172000000
20     2       3    2000    0,1     50  10/05/17 10:59:50,127000000
20     3       2    3000    0,1     50  10/05/17 11:00:39,051000000
20     4       2    3000    0,1     50  10/05/17 11:01:15,533000000

i.e. for every SITE the S_ID, BAN, COUNT, P, V and TIMESTAMP with the MAX(TIMESTAMP)


Solution

  • Here you go:

    SELECT 
        SITE
        , S_ID
        ,BAN
        ,COUNT
        ,P
        ,V
        ,TimeStamp
    FROM [Your Table Name]
    INNER JOIN 
    (
        SELECT 
            SITE
            , S_ID
            , MAX(TIMESTAMP) as MaxTimeStamp 
        FROM [Your Table Name] 
        GROUP BY 
            SITE 
            , S_ID
        ) AS MaxDAata ON
            MaxData.SITE = [Your Table Name].SITE 
            AND MaxData.S_ID = [Your Table Name].S_ID
           AND MaxData.TimeStamp = [Your Table Name].MaxTimeStamp