2010-04-29 16 views

cevap

9

Nasıl böyle bir şey:

select 'first', f1, f2, f3, f4 from tbl 
    order by f1 asc, f2 asc 
    limit 1 
union all 
select 'last', f1, f2, f3, f4 from tbl 
    order by f1 desc, f2 desc 
    limit 1 

Açıkçası bir where fıkrada istediğini koşul eklemek için çekinmeyin ama order by temel önermesi iki select bölümlerde sırasını tersine etmektir.

limit cümlesi her iki durumda da ilk satırı alır. Bu, siparişi tersine çevirdiğinizden dolayı, select numaralı numaralı satırın son satırı olarak olur.

Koşullarınızdan kaynaklanan yalnızca bir satır varsa ve iki kez döndürmesini istemiyorsanız, union all yerine union kullanın.

+0

Parantez nedir? –

+1

@Alexander, evet, parantezler çok güzel ve onlar hakkında düzgün bir akışa sahipler. Doğru şekilde dengelenmişlerse çok çekicidirler. Ancak, onlar benim cevap için gerçekten gerekli değildir, bu yüzden ben onları şimdi denklem dışında bırakacağım :-) – paxdiablo

+0

Parantez olmadan Bir istisna alıyorum 'SQLSTATE [HY000]: Genel hata: 1221 Yanlış kullanım UNION ve ORDER BY' –

23

İlk ve son, yalnızca bir alan (lar) da sıralanan sorgu çıktısı olduğunda anlamlıdır.

select col1 from tab1 order by col1 asc limit 1; 

son kayıt almak için::

select col1 from tab1 order by col1 desc limit 1; 
5
select * from table 
where id = (select id from tab1 order by col1 asc limit 1) or 
id = (select id from tab1 order by col1 desc limit 1); 
+0

Alt sorgunuzdaki yan kolonlar bu ifadeyi bozacaktır. – dangermark

16
SELECT 
(SELECT column FROM table WHERE [condition] ORDER BY column LIMIT 1) as 'first', 
(SELECT column FROM table WHERE [condition] ORDER BY column DESC LIMIT 1) as 'last' 

İlk seçmek gerektiğinde bu benim için çalıştı ve son tarih

ilk kaydını almak için etkinlik dizisinde.

-1
SELECT * FROM (
    SELECT first_name, LENGTH(first_name) FROM Employees 
    ORDER BY LENGTH(first_name) ASC 
    FETCH FIRST 1 rows ONLY) 
UNION 
SELECT * FROM (
    SELECT first_name, LENGTH(first_name) FROM Employees 
    ORDER BY LENGTH(first_name) DESC 
    FETCH FIRST 1 rows ONLY) 
ORDER BY 2 desc; 
+2

'FETCH FIRST' geçerli değil MySQL sözdizimi – FrankerZ

+0

@ FrankerZ: İşaretlediğiniz için teşekkürler. Evet, FETCH FIRST, Oracle Sql. –

İlgili konular