SELECT qiymati oldindan mysql max

shuning uchun men ushbu jadvalni har yili yarataman:

+----+------+
| id | name |
+----+------+
|  1 | 20162|
|  2 | 20162|
|  3 | 20171|
|  4 | 20171|<<<||| "how do i get this bfore max value"
|  5 | 20172| 
|  6 | 20172|
+----+------+

Agar so'rov qilsam:

SELECT name FROM table WHERE where name=(SELECT max(name))

The result is 20172

Buning oldidan qiymatni qanday olish mumkin (20171)?

0
Siz ikkinchi maksimal qiymatni xohlaysizmi?
qo'shib qo'ydi muallif Muhammad Saqlain, manba
ikkinchi eng yuqori? ha
qo'shib qo'ydi muallif www.cahyonegoro.com, manba
qaerda ismni tanlash (tanlash) yoki birlashma so'rovini ishlatishdan foydalaning
qo'shib qo'ydi muallif Earvin Nill Castillo, manba

7 javoblar

SELECT DISTINCT name FROM table ORDER BY name DESC LIMIT 1,1;

LIMIT so'zlari ikkita qiymatni, ofsetni va hisoblashni qabul qiladi. Faqat 1 qiymat berilganida, ofset 0 ni nazarda tutadi

DISTINCT is necessary as you have duplicate values for name. If this was unintentional, it's not needed.

Example at http://sqlfiddle.com/#!9/ea6e2/2

1
qo'shib qo'ydi
Aniq, bu kerakli natijani bermaydi
qo'shib qo'ydi muallif Strawberry, manba
Men ko'ryapman. Xo'sh, ba'zan shunday bo'ladi
qo'shib qo'ydi muallif Strawberry, manba
kerakli natijalar vaqt bilan almashdi! @Qulupnay
qo'shib qo'ydi muallif MohaMad, manba
Demak, bu savollarni o'zgartirish uchun ovozlar kerak emas! @Qulupnay
qo'shib qo'ydi muallif MohaMad, manba

Code.It sizga eng yuqori rekordni berishi mumkin.

SELECT NAME FROM table ORDER BY name DESC LIMIT n,1

Umid qilamanki bu yordam beradi

1
qo'shib qo'ydi

Bu ikkinchi max.

SELECT * 
  FROM table 
    WHERE name NOT IN (SELECT MAX(name) FROM table ) 
ORDER BY id DESC LIMIT 1
1
qo'shib qo'ydi
@MohaMad OP o'ta xohlagan satr haqida juda aniq.
qo'shib qo'ydi muallif Strawberry, manba
Siz haqsiz, mening sharhlarim mutlaqo noto'g'ridir! Men so'nggi xabarlarni o'chirib tashlayman va sizni bezovta qilmang, javobingiz uchun rahmat. @Qulupnay
qo'shib qo'ydi muallif MohaMad, manba
Bu shunchaki uning obro'siga va ma'muriy darajalariga bog'liq edi! Original kodni tiklashga urindim
qo'shib qo'ydi muallif MohaMad, manba
WHERE qaerda bor bo'lsa, javobingizni yangilang @MuhammadSaqlain
qo'shib qo'ydi muallif MohaMad, manba
Bu yangi, do'stlar oldida eski kodni saqlab qolish yaxshiroq edi!
qo'shib qo'ydi muallif MohaMad, manba
Hammasi noto'g'ri edi.
qo'shib qo'ydi muallif Muhammad Saqlain, manba
Stak hatto o'zgarishdan oldin meni tasdiqlamadi.
qo'shib qo'ydi muallif Muhammad Saqlain, manba
@MohaMad tugadi. Rahmat.
qo'shib qo'ydi muallif Muhammad Saqlain, manba

Bundan tashqari siz buni sinab ko'rishingiz mumkin:

SELECT name
FROM (SELECT DISTINCT name FROM yourtable) TMP
ORDER BY name DESC LIMIT 1,1
0
qo'shib qo'ydi

bu haqda:

select b.second_id,b.name from
(select id, max(name) as max from tbl_max) as a
LEFT JOIN
(select  id as second_id, name from tbl_max ) as b  
on a.id <> second_id where name < a.max  order by name desc limit 1;

Boshqa bir yechim juda yaxshi:

set @max= 0;
select max(name) into @max from tbl_max;
select * from tbl_max where name < @max ORDER BY id desc limit 1

natijasini qaytaradi

4 20171

0
qo'shib qo'ydi
Ha, haqiqat, baribir rahmat, @MohaMad.
qo'shib qo'ydi muallif Vijunav Vastivch, manba
ikkita birinchi qatorni ikkinchi so'rovlar blokida birlashtira olasiz: SELECT @max: = MAX (ism) FRM tablename;
qo'shib qo'ydi muallif MohaMad, manba

Siz kichik hiyla qila olasiz:

SELECT name FROM table ORDER BY name DESC LIMIT 1,1

Agar siz portativ echimni xohlasangiz (yuqorida aytilganidek, faqat MySQL-da ishlaydi):

SELECT name FROM table t1 where 
    1 = (SELECT count(distinct name) 
        from table t2 
        where t2.name > t1.name )

Bu, undan katta bo'lgan boshqa ismga ega bo'lgan nomni tanlaydi. Masalan, masalan, barcha qadriyatlar bir-biriga o'xshash, biroq aslida niyat bo'lishi mumkin.

0
qo'shib qo'ydi
@ www.cahyonegoro.com aslida sizning vazifangiz uchun 2-kod ishlaydi. Birinchisi, qat'iy nazar ikkinchi qatorni oladi. Birinchisi ishlash uchun GROUP BY name kerak.
qo'shib qo'ydi muallif apokryfos, manba
Buning uchun 2 ta maksimal elementni 2 ta eng yuqori ish haqi so'rovini olish kabi biz ham xuddi shunday qilishimiz mumkin.
qo'shib qo'ydi muallif rahul rathore, manba
Aniq, bu fokuslar qiladi .. rahmat inson
qo'shib qo'ydi muallif www.cahyonegoro.com, manba

Agar Max (ism)

SELECT id,MAX(name) FROM table
WHERE name < (SELECT MAX(name) FROM table )

yoki

SELECT id,MAX(name) FROM table
WHERE name <> (SELECT MAX(name) FROM table )

And there is an article fyoki Find nth high value


(as Question changed later, this tricks is not useful fyoki this problem)

can you use this simple yokider by ?

SELECT * FROM tablename
group by name
yokider by name desc
limit 1,1

Agar sizda MAX (ismi) da bir nechta teng qiymatlar mavjud bo'lsa, guruhi tomonidan kerak bo'lsa, bu so'rov ham umumiy echim emas!

0
qo'shib qo'ydi