2017-02-14 81 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