2017-02-14 48 views
1

如何统计每位用户每天的最后登录次数。计算每位用户每天的最后登录量

表类似于这样

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. 一位用户可以多次登录,因此日期打印多次次,但我只想显示上次登录日期。

请让我知道,请.....看起来很简单,但我卡住

+0

在某些(大多数)的情况下,这可能是与'GROUP BY'进行,并使用'MAX(日期)'(依赖于DBMS) – AxelH

+0

哪你使用的是dbms吗? (当涉及到日期/时间时,许多产品远不符合ANSI SQL标准。) – jarlh

+0

列数据类型? – jarlh

回答

2

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

组用户的每一天(即TRUNC("Date"))的结果(即name)和然后让每个组的最后一个值,你可以取最大值:

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") 
+0

很好用,谢谢:) – Codework

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 

说明:

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

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

+0

从[Oracle文档](https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions027.htm#SQLRF00620): 'CONVERT'将字符串从一个字符集转换为另一个字符集。这似乎不是甲骨文的答案。您可能的意思是使用'TRUNC'功能。 – MT0

+0

我的不好。在第一篇文章编辑中,标签是sql-server或至少它认为它是 – devoh

+0

[sql]标签是指SQL语言,并不是MS SQL Server的简称(尽管有些海报确实使用它)。 – APC