[SQL] SQL은 - 어떻게 최대 값을 가진 열을 갖는 행을 선택합니다
SQLSQL은 - 어떻게 최대 값을 가진 열을 갖는 행을 선택합니다
date value
18/5/2010, 1 pm 40
18/5/2010, 2 pm 20
18/5/2010, 3 pm 60
18/5/2010, 4 pm 30
18/5/2010, 5 pm 60
18/5/2010, 6 pm 25
난 맥스 (값)를 갖는 로우 (즉. 60)에 대해 질의를해야한다. 그래서, 여기에 우리는 두 행을 얻을. (-> 60 즉 18/5/2010 오후 3시) 그에서, 나는 그 날의 가장 낮은 타임 스탬프 행이 필요
해결법
-
==============================
1.등 TOP, LIMIT, ROWNUM, ... 등의 키워드는 데이터베이스에 따라 달라집니다. 자세한 내용은이 문서를 읽어 보시기 바랍니다.
등 TOP, LIMIT, ROWNUM, ... 등의 키워드는 데이터베이스에 따라 달라집니다. 자세한 내용은이 문서를 읽어 보시기 바랍니다.
http://en.wikipedia.org/wiki/Select_(SQL)#Result_limits
오라클 : ROWNUM을 사용할 수 있습니다.
select * from (select * from table order by value desc, date_column) where rownum = 1;
더 구체적으로 질문에 대답 :
select high_val, my_key from (select high_val, my_key from mytable where something = 'avalue' order by high_val desc) where rownum <= 1
-
==============================
2.해석학! 이 두 번 테이블에 액세스하는 것을 방지 :
해석학! 이 두 번 테이블에 액세스하는 것을 방지 :
SELECT DISTINCT FIRST_VALUE(date_col) OVER (ORDER BY value_col DESC, date_col ASC), FIRST_VALUE(value_col) OVER (ORDER BY value_col DESC, date_col ASC) FROM mytable;
-
==============================
3.답변 HAVING 절을 추가하는 것입니다 :
답변 HAVING 절을 추가하는 것입니다 :
SELECT [columns] FROM table t1 WHERE value= (select max(value) from table) AND date = (select MIN(date) from table t2 where t1.value = t2.value)
이 일을해야하며, 별도의 서브 날짜 절에서 선택한 가질 필요를 제거한다.
-
==============================
4.
SQL> create table t (mydate,value) 2 as 3 select to_date('18/5/2010, 1 pm','dd/mm/yyyy, hh am'), 40 from dual union all 4 select to_date('18/5/2010, 2 pm','dd/mm/yyyy, hh am'), 20 from dual union all 5 select to_date('18/5/2010, 3 pm','dd/mm/yyyy, hh am'), 60 from dual union all 6 select to_date('18/5/2010, 4 pm','dd/mm/yyyy, hh am'), 30 from dual union all 7 select to_date('18/5/2010, 5 pm','dd/mm/yyyy, hh am'), 60 from dual union all 8 select to_date('18/5/2010, 6 pm','dd/mm/yyyy, hh am'), 25 from dual 9 / Table created. SQL> select min(mydate) keep (dense_rank last order by value) mydate 2 , max(value) value 3 from t 4 / MYDATE VALUE ------------------- ---------- 18-05-2010 15:00:00 60 1 row selected.
문안 인사, 롭.
-
==============================
5.기술적으로,이 @Sujee과 같은 대답이다. 또한 작동 여부에 오라클의 버전에 따라 달라집니다. (나는이 구문은 오라클 (12)에 도입 된 생각 ??)
기술적으로,이 @Sujee과 같은 대답이다. 또한 작동 여부에 오라클의 버전에 따라 달라집니다. (나는이 구문은 오라클 (12)에 도입 된 생각 ??)
SELECT * FROM table ORDER BY value DESC, date_column ASC FETCH first 1 rows only;
내가 말하는대로 보닛 아래에 보면,이 코드는 Sujee의 @처럼 읽을 내부적으로 오라클 최적화하여 압축을 푼 생각합니다. 그러나, 나는 꽤 코딩 빠는 해요, 그리고 좋은 이유없이 선택 문을 중첩하는 것은 아름다운 자격을하지 않습니다! :-피
-
==============================
6.오라클의 경우 :
오라클의 경우 :
이 범위에있어서, 테이블의 최대 (high_val)의 키를 얻는다.
select high_val, my_key from (select high_val, my_key from mytable where something = 'avalue' order by high_val desc) where rownum <= 1
-
==============================
7.오라클 DB의 경우 :
오라클 DB의 경우 :
create table temp_test1 (id number, value number, description varchar2(20)); insert into temp_test1 values(1, 22, 'qq'); insert into temp_test1 values(2, 22, 'qq'); insert into temp_test1 values(3, 22, 'qq'); insert into temp_test1 values(4, 23, 'qq1'); insert into temp_test1 values(5, 23, 'qq1'); insert into temp_test1 values(6, 23, 'qq1'); SELECT MAX(id), value, description FROM temp_test1 GROUP BY value, description; Result: MAX(ID) VALUE DESCRIPTION ------------------------- 6 23 qq1 3 22 qq
-
==============================
8.가장 간단한 대답은 것
가장 간단한 대답은 것
"T1"라는 테스트 테이블을 --Setup
create table t1 (date datetime, value int)
- 데이터를로드합니다. - 참고 : 질문보다 날짜 형식 다른
insert into t1 Select '5/18/2010 13:00',40 union all Select '5/18/2010 14:00',20 union all Select '5/18/2010 15:00',60 union all Select '5/18/2010 16:00',30 union all Select '5/18/2010 17:00',60 union all Select '5/18/2010 18:00',25
- 최대 수량 및 분 날짜 행을 찾을 수 있습니다.
select * from t1 where value = (select max(value) from t1) and date = (select min(date) from t1 where value = (select max(value) from t1))
난 당신이 "TOP 1"답을 할 수있는 알고 있지만, 일반적으로 솔루션은 당신이 어떤 이유로 것을 사용할 수 없다는 것을 충분히 복잡해진다.
-
==============================
9.
public string getMaximumSequenceOfUser(string columnName, string tableName, string username) { string result = ""; var query = string.Format("Select MAX ({0})from {1} where CREATED_BY = {2}", columnName, tableName, username.ToLower()); OracleConnection conn = new OracleConnection(_context.Database.Connection.ConnectionString); OracleCommand cmd = new OracleCommand(query, conn); try { conn.Open(); OracleDataReader dr = cmd.ExecuteReader(); dr.Read(); result = dr[0].ToString(); dr.Dispose(); } finally { conn.Close(); } return result; }
from https://stackoverflow.com/questions/2854257/sql-how-to-select-a-row-having-a-column-with-max-value by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 기준 개체로 그룹 최대 절전 모드 (0) | 2020.05.01 |
---|---|
[SQL] 문자열이 고유 식별자 인 경우 확인하는 방법? (0) | 2020.05.01 |
[SQL] SQL LIKE의 C # 버전 (0) | 2020.05.01 |
[SQL] 물음표는 SQL 쿼리에 무엇을 상징 하는가? [복제] (0) | 2020.05.01 |
[SQL] 어떻게 ROWNUM 같은 모든 테이블에서 열 및 추가 열을 선택합니까? (0) | 2020.05.01 |