计算每个用户每天的最后一次登录

时间:2017-02-14 13:08:00

标签: sql oracle date oracle-sqldeveloper

如何计算每个用户每天的最后一次登录。

表格与此类似

id  name   Date 
-----------------
1    a    01-Feb-2017
2    a    01-Feb-2017
3    a    01-Feb-2017
4    b    02-Feb-2017
5    b    02-Feb-2017
6    c    04-Feb-2017
7    c    04-Feb-2017
  1. 我想做的就是将to_char(日期,'dd-mm-yy-hh-mm-ss)放到日期,因为我的日期没有时间。
  2. 2017年1月2日获取用户a的最新登录信息,2017年2月2日用户b和2017年4月2日用户c
  3. 一个用户可以多次登录,因此日期会多次打印,但我只想显示上次登录日期。
  4. 请告诉我.....请看起来很简单,但我被困了

2 个答案:

答案 0 :(得分:2)

  

如何计算每个用户每天的最后一次登录。

按用户(即name)和每天(即TRUNC( "Date" ))对结果进行分组,然后获取每组最后一个值,您可以采取最大值:

SELECT name, MAX( "Date" )
FROM   your_table
GROUP BY name, TRUNC( "Date" )
  

我的约会没有时间。

是的,他们这样做。 SQL Developer只是没有显示它。

要么更改NLS_DATE_FORMAT参数,请参阅this answer

alter the oracle session parameter

或者将输出格式化为字符串:

SELECT name,
       TO_CHAR( MAX( "Date" ), 'YYYY-MM-DD HH24:MI:SS' ) AS last_date
FROM   your_table
GROUP BY name, TRUNC( "Date" )

答案 1 :(得分:0)

试试这个:

SELECT name, MAX(TO_DATE("Date", 'DD-MM-YYYY')) last_date
FROM 
(
    SELECT 1 AS id, 'a' AS name, '01-Feb-2017' AS "Date" 
        FROM dual UNION
    SELECT 2, 'a', '01-Feb-2017'
        FROM dual UNION
    SELECT 3, 'a', '01-Feb-2017'
        FROM dual UNION
    SELECT 4, 'b', '02-Feb-2017'
        FROM dual union
    SELECT 5, 'b', '02-Feb-2017'
        FROM dual UNION
    SELECT 6, 'c', '04-Feb-2017'
        FROM dual UNION
    SELECT 7, 'c', '04-Feb-2017'
        FROM dual
) mytable
GROUP BY name

输出:

    NAME    LAST_DATE
1   a   01.02.2017 00:00:00
2   c   04.02.2017 00:00:00
3   b   02.02.2017 00:00:00

说明:

您按名称对结果进行分组,您希望是最后一个日期,因此需要最多(日期)。但是你有一个字符串作为日期。首先,您将其转换为日期时间。

如果你想要一个不同的输出,你可以提供给我们......因为目前还不清楚。