2017-07-14 48 views
0

我有三列的表:獨特VS MAX在SQL語句

PERSON 
VISITOR 
DATE 

表基本上是一個事務表。符合下列條件:

  1. 有每人多行
  2. 有每個訪客多行
  3. 有一個特定的人/訪客組合的多行。
  4. 假定獨特的人/日期組合

我需要的是

  • 我想遊客每個人的MAX日期。
  • 我不能在輸出多人。
  • 人必須是唯一的。
  • 遊客可以重複。

我曾嘗試:

SELECT 
    ROW_NUMBER() OVER (PARTITION BY PERSON, VISITOR ORDER BY Date DESC) row_num, 
    PERSON, 
    VISITOR as VISITOR 
FROM 
    `TABLE` 
ORDER BY 
    PERSON 

回答

2

也許這個...不知道我完全理解的問題。樣本數據/預期結果將有所幫助。

你說你想要的只有1人,每最大日遊客所以1 ROW_NUM將是記錄W /最大日期。而且由於我們按人進行劃分,A人是否有3位訪問者並不重要。只有該人及其最近的訪客將被列出。

WITH cte as (
SELECT ROW_NUMBER() OVER (PARTITION BY PERSON ORDER BY Date DESC) row_num 
    , PERSON 
    , VISITOR as VISITOR 
FROM `TABLE`) 

SELECT * 
FROM cte 
WHERE row_Num = 1 

我認爲這是可以用交叉進行申請過,雖然我不是在使用他們又那麼好......

SELECT A.Person, A.Visitor, A.Date 
FROM table A 
CROSS APPLY (SELECT TOP 1 * 
      FROM TABLE B 
      WHERE A.Person = B.Person 
       and A.Visitor = B.Visitor 
       and A.Date = B.Date 
      ORDER BY DATE DESC) C 

本質內部查詢有關外每條記錄運行查詢;因此只有最上面的記錄纔會被返回,因此是最新的日期。

+0

THanks XQbert。它回答了我的問題,並給了我一些其他的東西來學習。最受讚賞。 – arcee123

1
select a.* from myTable as a inner join (
SELECT person, max(date) as maxDate from myTable group by person 
) as b 
on a.date = b.maxDate 
and a.person = b.person; 
0

我弱的英語讀寫。 在我看來,答案可能是:

SELECT `PERSON`, `VISITOR`, MAX(`DATE`) AS `DATE` 
FROM `TABLE` 
GROUP BY `PERSON`, `VISITOR`; 
+1

我不認爲你想雙方人員和訪客組,人是唯一的,這意味着每人一行。 – Chuck