Jak zrobić top 1 w Oracle?
9 answers
Jeśli chcesz tylko pierwszy wybrany wiersz, możesz:
select fname from MyTbl where rownum = 1
Możesz również użyć funkcji analitycznych, aby zamówić i wziąć górę x:
select max(fname) over (rank() order by some_factor) from MyTbl
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-12 14:36:12
SELECT *
FROM (SELECT * FROM MyTbl ORDER BY Fname )
WHERE ROWNUM = 1;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-10 17:13:26
Z Oracle 12c (czerwiec 2013) możesz go używać w następujący sposób.
SELECT * FROM MYTABLE
--ORDER BY COLUMNNAME -OPTIONAL
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-12 14:38:15
Możesz użyć ROW_NUMBER()
z klauzulą ORDER BY
w sub-query i użyć tej kolumny w zastępstwie TOP N
. Można to wyjaśnić krok po kroku.
Patrz poniższa tabela zawierająca dwie kolumny NAME
i DT_CREATED
.
Jeśli musisz wziąć tylko dwie pierwsze daty niezależnie od NAME
, możesz skorzystać z poniższego zapytania. Logika została napisana w zapytaniu
-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
-- Generates numbers in a column in sequence in the order of date
SELECT ROW_NUMBER() OVER (ORDER BY DT_CREATED) AS RNO,
NAME,DT_CREATED
FROM DEMOTOP
)TAB
WHERE RNO<3;
Wynik
W niektórych sytuacje, musimy wybrać TOP N
Wyniki odpowiadające każdemu NAME
. W takim przypadku możemy użyć PARTITION BY
z klauzulą ORDER BY
w sub-zapytaniu. Zapoznaj się z poniższym zapytaniem.
-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
--Generates numbers in a column in sequence in the order of date for each NAME
SELECT ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY DT_CREATED) AS RNO,
NAME,DT_CREATED
FROM DEMOTOP
)TAB
WHERE RNO<3;
Wynik
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-06 04:59:01
Możesz zrobić coś takiego
SELECT *
FROM (SELECT Fname FROM MyTbl ORDER BY Fname )
WHERE rownum = 1;
Możesz również użyć funkcji analitycznych RANK i / lub DENSE_RANK, ale ROWNUM jest prawdopodobnie najłatwiejsze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-10 05:20:39
Użycie:
SELECT x.*
FROM (SELECT fname
FROM MyTbl) x
WHERE ROWNUM = 1
Jeśli używasz Oracle9i+, możesz spojrzeć na używając funkcji analitycznych, takich jak ROW_NUMBER (), ale nie będą one działać tak dobrze, jak ROWNUM.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-10 17:31:21
select * from (
select FName from MyTbl
)
where rownum <= 1;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-06 10:07:00
Aby wybrać pierwszy wiersz z tabeli i wybrać jeden wiersz z tabeli, są dwa różne zadania i wymagają innego zapytania. Istnieje wiele możliwych sposobów, aby to zrobić. Cztery z nich to:
Pierwszy
select max(Fname) from MyTbl;
Drugi
select min(Fname) from MyTbl;
Trzeci
select Fname from MyTbl where rownum = 1;
Czwarty
select max(Fname) from MyTbl where rowid=(select max(rowid) from MyTbl)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-12 14:37:37
Miałem ten sam problem i mogę to naprawić za pomocą tego rozwiązania:
select a.*, rownum
from (select Fname from MyTbl order by Fname DESC) a
where
rownum = 1
Możesz zamówić swój wynik wcześniej, aby mieć pierwszą wartość na górze.
Powodzenia
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-21 17:17:54