SQL में किसी तालिका के अंतिम रिकॉर्ड का चयन कैसे करें?


133

यह एक तालिका से सभी रिकॉर्ड का चयन करने के लिए एक नमूना कोड है। क्या कोई मुझे दिखा सकता है कि उस तालिका के अंतिम रिकॉर्ड का चयन कैसे करें?

select * from table

जब मैं उपयोग करता हूं: SELECT * FROM TABLE ORDER BY ID DESC LIMIT मुझे यह त्रुटि मिलती है: लाइन 1: 'सीमा' के पास गलत सिंटैक्स। यह मेरे द्वारा उपयोग किया जाने वाला कोड है:

private void LastRecord()
{
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HELPDESK_OUTLOOKConnectionString3"].ToString());

    conn.Open();
    SqlDataReader myReader = null;
    SqlCommand myCommand = new SqlCommand("SELECT * FROM HD_AANVRAGEN ORDER BY " +
                "aanvraag_id DESC LIMIT 1", conn);
    myReader = myCommand.ExecuteReader();
    while (myReader.Read())
    {
        TextBox1.Text = (myReader["aanvraag_id"].ToString());
        TextBox1.Text += (myReader["wijziging_nummer"].ToString());
        TextBox1.Text += (myReader["melding_id"].ToString());
        TextBox1.Text += (myReader["aanvraag_titel"].ToString());
        TextBox1.Text += (myReader["aanvraag_omschrijving"].ToString());
        TextBox1.Text += (myReader["doorlooptijd_id"].ToString());
        TextBox1.Text += (myReader["rapporteren"].ToString());
        TextBox1.Text += (myReader["werknemer_id"].ToString());
        TextBox1.Text += (myReader["outlook_id"].ToString());
    }
}

खैर, आपको कुछ पर आदेश देना होगा। क्या आपके पास एक प्राथमिक कुंजी है? शायद एक आईडी?
एलेक्सन

"अंतिम रिकॉर्ड" से आपका क्या अभिप्राय है? प्राथमिक कुंजी कॉलम के उच्चतम मूल्य के साथ?
मैरिन व्रॉब्ल्वस्की

जवाबों:


337

बिना किसी और जानकारी के, कौन सा डेटाबेस आदि सबसे अच्छा हम कर सकते हैं कुछ ऐसा है

एस क्यू एल सर्वर

SELECT TOP 1 * FROM Table ORDER BY ID DESC

माई एसक्यूएल

SELECT * FROM Table ORDER BY ID DESC LIMIT 1

1
शीर्ष 1 पहले एक को ले जाएगा, नहीं?
टैसिस्टो

30
हां, लेकिन इसीलिए आप DESC
एड्रियन स्टैंडर

3
लेकिन अगर आपने एक लाख रिकॉर्ड के लिए DESC द्वारा ऑर्डर का इस्तेमाल किया तो यह आपकी क्वेरी को धीमा कर देगा @AdriaanStander
चार्ल्स हर्नांडेज़

1
Mysql एक sql सर्वर के साथ भी काम करता है। यह एक सामान्य एसक्यूएल कमांड है।
अज़हर 22k

1
@ itz अजहर: इस क्वेरी के MySQL रूप है नहीं एक सामान्य एसक्यूएल आदेश; LIMITकीवर्ड एसक्यूएल का एक विस्तार है कि केवल कुछ RDBMSes लागू है, विशेष रूप से, ओरेकल में एक LIMITकीवर्ड नहीं है
लैंड्रू 27

23

मान लें कि आपके पास एक Id कॉलम है:

SELECT TOP 1 *
  FROM table
 ORDER
    BY Id DESC;

साथ ही, यह SQL सर्वर पर काम करेगा। मुझे लगता है कि MySQL का उपयोग करने की आवश्यकता हो सकती है:

SELECT *
  FROM table
 ORDER
    BY Id DESC
 LIMIT 1

लेकिन, मैं इस बारे में 100% निश्चित नहीं हूं।

संपादित करें

अन्य उत्तरों को देखते हुए, मैं अब 100% आश्वस्त हूं कि मैं MySQL स्टेटमेंट के साथ सही हूं: o)

संपादित करें

बस आपकी ताज़ा टिप्पणी देखी। तुम यह कर सकते थे:

SELECT MAX(Id)
  FROM table

इससे आपको सबसे ज्यादा Id नंबर मिलेगा।


2
डेटा से परिपूर्ण MAX (आईडी) का चयन करें!
रिकार्डो फेरचर

15

पिछले पाने के लिए पंक्ति एक की एसक्यूएल-डाटाबेस इस एसक्यूएल स्ट्रिंग का उपयोग करें:

SELECT * FROM TableName WHERE id=(SELECT max(id) FROM TableName);

आउटपुट:

आपके db की अंतिम पंक्ति!


3
ओरेकल के साथ भी पूरी तरह से ठीक है और छँटाई की तुलना में तेज़ है
MaKiPL

यह सबसे अच्छा है। कोई छँटाई नहीं, कोई "टॉप 1" नहीं, बस समर्थित और प्रदर्शन करने वाले प्रश्न। उत्तम।
मैट एफ।

7
SELECT * FROM TABLE ORDER BY ID DESC LIMIT 1

हाँ यह mysql, SQL Server:

SELECT TOP 1 * FROM Table ORDER BY ID DESC

यह एक त्रुटि देता है! मुझे लगा कि यह SQL है, लेकिन यह
Tassisto

1
SQL सर्वर के लिए संपादित किया गया है, हालांकि आपने प्रश्न में अपना DBMS निर्दिष्ट नहीं किया है।
सिमोन

3
SELECT * FROM table ORDER BY Id DESC LIMIT 1

2

अंतिम केवल पहला है जब आप अपने आदेश को उलटते हैं।


0

Oracle में, आप यह कर सकते हैं:

SELECT *
FROM (SELECT EMP.*,ROWNUM FROM EMP ORDER BY ROWNUM DESC)
WHERE ROWNUM=1;

यह संभव तरीकों में से एक है।


0
select ADU.itemid, ADU.startdate, internalcostprice 
from ADUITEMINTERNALCOSTPRICE ADU

right join

   (select max(STARTDATE) as Max_date, itemid 
   from ADUITEMINTERNALCOSTPRICE
   group by itemid) as A

on A.ITEMID = ADU.ITEMID
and startdate= Max_date

1
Stackoverflow में आपका स्वागत है। आपके द्वारा प्रदान किए गए उत्तर के अलावा, कृपया इस बात की संक्षिप्त व्याख्या प्रदान करें कि यह समस्या क्यों और कैसे ठीक होती है।
19

0

अपने टेबल डिज़ाइन में एक स्वचालित पंक्ति पहचानकर्ता, जैसे कि यह हमेशा एक अच्छा अभ्यास है

 [RowID] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL

, तब आप अपनी अंतिम पंक्ति को पहचान सकते हैं

 select * from yourTable where rowID =  @@IDENTITY 


0

यदि आपके पास स्वयं-वृद्धि क्षेत्र (कहना ID) है तो आप कुछ ऐसा कर सकते हैं: SELECT * FROM foo WHERE ID = (SELECT max(ID) FROM foo)


-1
$sql="SELECT tot_visit FROM visitors WHERE date = DATE(NOW()) - 1 into @s                
$conn->query($sql);
$sql = "INSERT INTO visitors (nbvisit_day,date,tot_visit) VALUES (1,CURRENT_DATE,@s+1)";
$conn->query($sql);

क्या आपने प्रश्न को ध्यान से पढ़ा? कैसे करता है INSERTएक नया मान "कैसे है कि तालिका के अंतिम रिकॉर्ड चुनने के लिए" से संबंधित 'ing?
landru27

2
ढेर अतिप्रवाह में आपका स्वागत है! कोड स्निपेट के लिए धन्यवाद, जो कुछ सीमित, तत्काल सहायता प्रदान कर सकता है। एक उचित व्याख्या इस समस्या का एक अच्छा समाधान क्यों है, यह वर्णन करके अपने दीर्घकालिक मूल्य में बहुत सुधार करेगी , और भविष्य के पाठकों के लिए अन्य समान प्रश्नों के साथ इसे और अधिक उपयोगी बना देगी। कृपया कुछ स्पष्टीकरण जोड़ने के लिए अपने उत्तर को संपादित करें, जिसमें आपके द्वारा की गई धारणाएँ शामिल हैं।
sepehr

जब ओपी ने SQL भाषा के बारे में पूछा हो तो php विशिष्ट कोड न लिखें।
स्टेव मोरेट


-1

मैंने रिकार्डो को उकसाया। वास्तव में अधिकतम छँटाई की तुलना में बहुत कुशल है। अंतर देखें। उत्कृष्ट है।

मुझे अंतिम पंक्ति / अपडेट रिकॉर्ड (टाइमस्टैम्प) प्राप्त करना था

`sqlite> select timeStamp from mypadatav2 order by timeStamp desc limit 1;
 2020-03-11 23:55:00
 Run Time: real 1.806 user 1.689242 sys 0.117062`

`sqlite> select max(timeStamp) from mypadatav2;
 2020-03-11 23:55:00
 Run Time: real 0.553 user 0.412618 sys 0.134340`
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.