[SQL] 나는 각 사용자에 대한 최신 기록 날짜를 SQL 쿼리 어떻게
SQL나는 각 사용자에 대한 최신 기록 날짜를 SQL 쿼리 어떻게
나는 사용자가 로그온 할 때까지로 수집 항목이있는 테이블이있다.
username, date, value
--------------------------
brad, 1/2/2010, 1.1
fred, 1/3/2010, 1.0
bob, 8/4/2009, 1.5
brad, 2/2/2010, 1.2
fred, 12/2/2009, 1.3
etc..
어떻게 나에게 각 사용자에 대한 최신 날짜를 줄 것이다 쿼리를 만들려면 어떻게해야합니까?
업데이트 : 내가 가장 늦은 날짜와 함께 간다 값을 가질 필요가 있다고 잊어 버렸습니다.
해결법
-
==============================
1.
select t.username, t.date, t.value from MyTable t inner join ( select username, max(date) as MaxDate from MyTable group by username ) tm on t.username = tm.username and t.date = tm.MaxDate
-
==============================
2.사용 윈도우 함수 (오라클, 포스트 그레스 8.4 2005 SQL 서버, DB2, 사이베이스, 파이어 버드 3.0, MariaDB 10.3에서 작품)
사용 윈도우 함수 (오라클, 포스트 그레스 8.4 2005 SQL 서버, DB2, 사이베이스, 파이어 버드 3.0, MariaDB 10.3에서 작품)
select * from ( select username, date, value, row_number() over(partition by username order by date desc) as rn from yourtable ) t where t.rn = 1
-
==============================
3.나는 개발자의 대부분이 큰 데이터에 미치는 영향을 고려하지 않고 인라인 쿼리 사용을 참조하십시오.
나는 개발자의 대부분이 큰 데이터에 미치는 영향을 고려하지 않고 인라인 쿼리 사용을 참조하십시오.
간단하게, 당신은이에 의해 얻을 수 있습니다 :
SELECT a.username, a.date, a.value FROM myTable a LEFT OUTER JOIN myTable b ON a.username = b.username AND a.date < b.date WHERE b.username IS NULL ORDER BY a.date desc;
-
==============================
4.사용자의 최대 날짜를 포함하는 전체 행을 얻으려면 :
사용자의 최대 날짜를 포함하는 전체 행을 얻으려면 :
select username, date, value from tablename where (username, date) in ( select username, max(date) as date from tablename group by username )
-
==============================
5.
SELECT * FROM MyTable T1 WHERE date = ( SELECT max(date) FROM MyTable T2 WHERE T1.username=T2.username )
-
==============================
6.내 경험에서 가장 빠른 방법은 테이블에 새로운 행이없는 각 행을하는 것입니다.
내 경험에서 가장 빠른 방법은 테이블에 새로운 행이없는 각 행을하는 것입니다.
또 다른 장점은 사용되는 구문은 매우 간단하고, 쿼리의 의미 파악에 오히려 쉽다는 것을 (더 새로운 행이 사용자 이름이 고려되고 존재하지 않도록 모든 행을)이다.
SELECT username, value FROM t WHERE NOT EXISTS ( SELECT * FROM t AS witness WHERE witness.username = t.username AND witness.date > t.date );
SELECT username, value FROM ( SELECT username, value, row_number() OVER (PARTITION BY username ORDER BY date DESC) AS rn FROM t ) t2 WHERE rn = 1
SELECT t.username, t.value FROM t INNER JOIN ( SELECT username, MAX(date) AS date FROM t GROUP BY username ) tm ON t.username = tm.username AND t.date = tm.date;
SELECT username, value FROM t LEFT OUTER JOIN t AS w ON t.username = w.username AND t.date < w.date WHERE w.username IS NULL
-
==============================
7.이 사람은 당신에게 당신의 편집 질문에 대한 정확한 결과를 제공해야합니다.
이 사람은 당신에게 당신의 편집 질문에 대한 정확한 결과를 제공해야합니다.
하위 쿼리는 최근 날짜의 행을 찾을 수있을 거라 확신하게하고, 외부 GROUP BY는 관계 처리됩니다. 동일한 사용자에 대해 동일한 날짜에 대한 두 개의 항목이있는 경우, 가장 높은 값을 가진 하나를 반환합니다.
SELECT t.username, t.date, MAX( t.value ) value FROM your_table t JOIN ( SELECT username, MAX( date ) date FROM your_table GROUP BY username ) x ON ( x.username = t.username AND x.date = t.date ) GROUP BY t.username, t.date
-
==============================
8.또한 분석 순위 기능을 사용할 수 있습니다
또한 분석 순위 기능을 사용할 수 있습니다
with temp as ( select username, date, RANK() over (partition by username order by date desc) as rnk from t ) select username, rnk from t where rnk = 1
-
==============================
9.
SELECT Username, date, value from MyTable mt inner join (select username, max(date) date from MyTable group by username) sub on sub.username = mt.username and sub.date = mt.date
업데이트 된 문제를 해결합니다. 심지어 좋은 인덱싱, 큰 테이블에 너무 잘 작동하지 않을 수 있습니다.
-
==============================
10.
SELECT * FROM ReportStatus c inner join ( SELECT MAX(Date) AS MaxDate FROM ReportStatus ) m on c.date = m.maxdate
-
==============================
11.오라클은 내림차순으로 결과 집합을 정렬하고 첫 번째 레코드 소요를 들어, 그래서 당신은 최신 기록을 얻을 것이다 :
오라클은 내림차순으로 결과 집합을 정렬하고 첫 번째 레코드 소요를 들어, 그래서 당신은 최신 기록을 얻을 것이다 :
select * from mytable where rownum = 1 order by date desc
-
==============================
12.
SELECT DISTINCT Username, Dates,value FROM TableName WHERE Dates IN (SELECT MAX(Dates) FROM TableName GROUP BY Username) Username Dates value bob 2010-02-02 1.2 brad 2010-01-02 1.1 fred 2010-01-03 1.0
-
==============================
13.
SELECT t1.username, t1.date, value FROM MyTable as t1 INNER JOIN (SELECT username, MAX(date) FROM MyTable GROUP BY username) as t2 ON t2.username = t1.username AND t2.date = t1.date
-
==============================
14.표에서 선택 * 어디 lastest_date = (선택 최대 (LATEST_DATE) 표에서 위치를 사용자 = username이)
표에서 선택 * 어디 lastest_date = (선택 최대 (LATEST_DATE) 표에서 위치를 사용자 = username이)
내부 쿼리는 외부 쿼리 내부 쿼리 결과에 따라 모든 데이터를 끌어, 현재 사용자의 최신 날짜를 반환합니다.
-
==============================
15.나는 내 테이블에 가지고 각 사용자에 대한 마지막 기록을 위해이 방법을 사용했다. PDA 장치에서 감지 최근 시간에 따라 영업 사원에 대한 마지막 위치를 얻을 수있는 질문이었다.
나는 내 테이블에 가지고 각 사용자에 대한 마지막 기록을 위해이 방법을 사용했다. PDA 장치에서 감지 최근 시간에 따라 영업 사원에 대한 마지막 위치를 얻을 수있는 질문이었다.
CREATE FUNCTION dbo.UsersLocation() RETURNS TABLE AS RETURN Select GS.UserID, MAX(GS.UTCDateTime) 'LastDate' From USERGPS GS where year(GS.UTCDateTime) = YEAR(GETDATE()) Group By GS.UserID GO select gs.UserID, sl.LastDate, gs.Latitude , gs.Longitude from USERGPS gs inner join USER s on gs.SalesManNo = s.SalesmanNo inner join dbo.UsersLocation() sl on gs.UserID= sl.UserID and gs.UTCDateTime = sl.LastDate order by LastDate desc
-
==============================
16.
SELECT * FROM TABEL1 WHERE DATE= (SELECT MAX(CREATED_DATE) FROM TABEL1)
-
==============================
17.내 작은 컴파일
내 작은 컴파일
그래서, 여기에 쿼리는 다음과 같습니다
select t.* from Table t inner join ( select distinct first_value(ID) over(partition by GroupColumn order by DateColumn desc) as ID from Table where FilterColumn = 'value' ) j on t.ID = j.ID
장점 :
단점 :
-
==============================
18.나는 그것으로 내 응용 프로그램에 대한 다소했다 :
나는 그것으로 내 응용 프로그램에 대한 다소했다 :
다음 쿼리는 다음과 같습니다
select distinct i.userId,i.statusCheck, l.userName from internetstatus as i inner join login as l on i.userID=l.userID where nowtime in((select max(nowtime) from InternetStatus group by userID));
-
==============================
19.이것은 위의 답변 중 하나와 비슷하지만, 내 생각에 그것은 훨씬 더 간단하고 정돈합니다. 또한, 십자가에 대한 쇼 좋은 사용은 문을 적용합니다. 위의 SQL Server 2005 및 위해 ...
이것은 위의 답변 중 하나와 비슷하지만, 내 생각에 그것은 훨씬 더 간단하고 정돈합니다. 또한, 십자가에 대한 쇼 좋은 사용은 문을 적용합니다. 위의 SQL Server 2005 및 위해 ...
select a.username, a.date, a.value, from yourtable a cross apply (select max(date) 'maxdate' from yourtable a1 where a.username=a1.username) b where a.date=b.maxdate
-
==============================
20.이것은 또한 사용자에 대한 모든 최신 항목을 얻기 위해 작동합니다.
이것은 또한 사용자에 대한 모든 최신 항목을 얻기 위해 작동합니다.
SELECT username, MAX(date) as Date, value FROM MyTable GROUP BY username, value
-
==============================
21.당신은 집계 함수 MAX와 GROUP BY를 사용합니다
당신은 집계 함수 MAX와 GROUP BY를 사용합니다
SELECT username, MAX(date), value FROM tablename GROUP BY username, value
from https://stackoverflow.com/questions/2411559/how-do-i-query-sql-for-a-latest-record-date-for-each-user by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL에 LINQ - 왼쪽 외부 복수로 가입 조건 가입 (0) | 2020.03.23 |
---|---|
[SQL] 어떻게 일부 sqlite3를 테이블의 데이터를 덤프합니까? (0) | 2020.03.23 |
[SQL] 외래 키는 NULL 및 / 또는 복제 될 수 있을까? (0) | 2020.03.23 |
[SQL] MySQL 데이터베이스의 모든 테이블에 대한 기록 수를 가져옵니다 (0) | 2020.03.23 |
[SQL] 다중 언어 데이터베이스 설계를위한 최상의 방법은 무엇입니까? [닫은] (0) | 2020.03.23 |