SQL सर्वर के साथ अंतिम पंक्ति को कैसे पढ़ें


88

SQL सर्वर के साथ अंतिम पंक्ति को पढ़ने का सबसे कुशल तरीका क्या है?

तालिका को एक अद्वितीय कुंजी पर अनुक्रमित किया जाता है - "नीचे" कुंजी मान अंतिम पंक्ति का प्रतिनिधित्व करते हैं।

जवाबों:


180

यदि आप MS SQL का उपयोग कर रहे हैं, तो आप कोशिश कर सकते हैं:

SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC 

17
अगर आपके पास DB में 5 मिलियन रिकॉर्ड हैं तो क्या होगा! : - \
डीप जूल

4
यदि तालिका को सॉर्ट कॉलम पर अनुक्रमित किया जाता है, तो SQL तालिका की अंतिम पंक्ति को पढ़ेगा। कोई महंगा छँटाई या पूर्ण टेबल स्कैन की जरूरत नहीं है।
चंचल

अगर मुझे पिछले 1000 रिकॉर्ड प्राप्त करने की आवश्यकता है तो मुझे कैसे मिल सकता है, क्या आप बता सकते हैं
श्री

1
@ श्री आप निष्पादित करेंगे SELECT TOP 1000 * FROM table_name ORDER BY column_name DESCऔर पिछले 1000 रिकॉर्ड का उत्पादन करना चाहिए।
रॉड अरगुमाडो

22
select whatever,columns,you,want from mytable
 where mykey=(select max(mykey) from mytable);

मेरा क्या है? मेरे मामले में?
मोगली

@ मोगली mykeyआपका टेबल इंडेक्स है
क्लिफ बर्टन

2
यदि mykeyअद्वितीय पहचानकर्ता यह दृष्टिकोण मदद नहीं करेगा
इमान महमूदीनसाब

18

आपको अपनी तालिका में विशिष्ट पहचान करने वाले कॉलम की आवश्यकता होगी, जैसे ऑटो-फिलिंग प्राथमिक कुंजी या डेटाइम कॉलम (अधिमानतः प्राथमिक कुंजी)। तो आप यह कर सकते हैं:

SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1

ORDER BY columnयह बताता है कि स्तंभ के आंकड़ों के अनुसार परिणाम rearange करने के लिए, और DESCयह बताता है परिणाम उल्टा करने के लिए (इस प्रकार पहले पिछले एक डाल)। उसके बाद, LIMIT 1इसे केवल एक पंक्ति में वापस जाने के लिए कहता है।


6
MSSQL,
LITIT

4
वाह, कठोर, मूल सवाल भी SQL सर्वर विशेष रूप से नहीं कहा। उपरोक्त समाधान पूरी तरह से वैध है भले ही SQL सर्वर एक ही अवधारणा का वर्णन करने के लिए विभिन्न शब्दों का उपयोग करता है। +1
ग्रेग हेविल

11

यदि आपकी कुछ आईडी क्रम में हैं, तो मुझे लगता है कि आपके डीबी में कुछ ऑर्डर होगा

SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)


4

मुझे लगता है कि नीचे क्वेरी बिना किसी छांटे कॉलम के अधिकतम प्रदर्शन के साथ SQL सर्वर के लिए काम करेगी

SELECT * FROM table 
WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1 
                             FROM table) 
                        ID 
                 FROM table)

आशा है आप समझ गए होंगे ... :)


यह सबसे अच्छा समाधान है जब आप DESC को सॉर्ट नहीं कर सकते हैं और आपको अंतिम पंक्ति की आवश्यकता है क्योंकि यह वापस आ गया है।
jjthebig1

3

मैंने SQl सर्वर 2008 में अंतिम sql क्वेरी का उपयोग करने की कोशिश की, लेकिन यह इसे गलत बताता है: "अंतिम 'एक मान्यता प्राप्त अंतर्निहित फ़ंक्शन नाम नहीं है।"

तो मैं का उपयोग कर समाप्त हो गया:

select max(WorkflowStateStatusId) from WorkflowStateStatus 

अंतिम पंक्ति की आईडी प्राप्त करने के लिए। एक भी उपयोग कर सकते हैं

Declare @i int
set @i=1
select WorkflowStateStatusId from Workflow.WorkflowStateStatus
 where WorkflowStateStatusId not in (select top (
   (select count(*) from Workflow.WorkflowStateStatus) - @i ) WorkflowStateStatusId from .WorkflowStateStatus)

3

आप last_value का उपयोग कर सकते हैं: SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...

मैं इसे अपने डेटाबेस में से एक पर परीक्षण करता हूं और यह उम्मीद के मुताबिक काम करता है।

आप यहाँ पर डी डॉक्युमेंट भी देख सकते हैं: https://msdn.microsoft.com/en-us/library/hh231517.aspx


2

इसे इस्तेमाल करे

SELECT id from comission_fees ORDER BY id DESC LIMIT 1

1
@Vinko Vrsalovic द्वारा उपरोक्त टिप्पणी के रूप में MSSQL का उपयोग नहीं करता है LIMIT। यह रिटर्नIncorrect syntax near LIMIT
frmbelz

1

MS SQL डेटाबेस 2005 के लिए तालिका की अंतिम पंक्ति को पुनः प्राप्त करने के लिए, आप निम्नलिखित प्रश्न का उपयोग कर सकते हैं:

select top 1 column_name from table_name order by column_name desc; 

नोट: MS SQL डेटाबेस 2005 के लिए तालिका की पहली पंक्ति प्राप्त करने के लिए, आप निम्नलिखित क्वेरी का उपयोग कर सकते हैं:

select top 1 column_name from table_name; 

2
select top 1बिना किसी आदेश के पहले रिकॉर्ड प्राप्त करने का एक विश्वसनीय तरीका नहीं है। यदि आप एक आदेश में नहीं डालते हैं, तो आप SQL को अनुमति देते हैं कि वह आपको कोई भी रिकॉर्ड दे सके।
कोड जादूगर

1

OFFSETऔर FETCH NEXTपरिणाम प्रदर्शित करते समय SQL पेजिंग को प्राप्त करने के लिए SQL Server 2012 की एक विशेषता है।

OFFSETतर्क एक परिणाम से वापसी पंक्तियों शुरू पंक्ति तय करने के लिए प्रयोग किया जाता है और FETCHतर्क पंक्तियों की संख्या का एक सेट वापस जाने के लिए प्रयोग किया जाता है।

SELECT *
FROM table_name
ORDER BY unique_column desc
OFFSET 0 Row
FETCH NEXT 1 ROW ONLY

0
SELECT * from Employees where [Employee ID] = ALL (SELECT MAX([Employee ID]) from Employees)

1
सबसे अच्छा जवाब इसी तरह हम पहली पंक्ति का चयन कर सकते हैं * कर्मचारियों से जहां [कर्मचारी आईडी] = ALL (सेलेक्ट मिन (कर्मचारी आईडी)) कर्मचारियों से)
मानस

0

यह है कि आप पिछला रिकॉर्ड कैसे प्राप्त करते हैं और एक्सेस डीबी में एक फ़ील्ड अपडेट करते हैं।

अपडेट करें compalints SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )


0

यदि आपके पास कोई आदेशित कॉलम नहीं है, तो आप प्रत्येक लाइनों की भौतिक आईडी का उपयोग कर सकते हैं:

SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot], 
              T.*
FROM MyTable As T
order by sys.fn_PhysLocFormatter(%%physloc%%) DESC

0

यदि आपके पास एक प्रतिकृति तालिका है, तो आपके पास क्लाइंटडेटाबेस में एक पहचान = 1000 लोकलडॉटबेस और आइडेंटिटी 2000 में हो सकती है, इसलिए यदि आप अंतिम आईडी को पकड़ते हैं, तो आपको हमेशा क्लाइंट से अंतिम मिल सकता है, वर्तमान कनेक्टेड डेटाबेस से अंतिम नहीं। तो सबसे अच्छा तरीका है जो अंतिम जुड़ा डेटाबेस लौटाता है:

SELECT IDENT_CURRENT('tablename')

0

अच्छी तरह से मुझे एक तालिका में "अंतिम मान" नहीं मिल रहा है, मुझे प्रति वित्तीय साधन अंतिम मूल्य मिल रहा है। यह वही नहीं है, लेकिन मुझे लगता है कि यह कुछ ऐसे लोगों के लिए प्रासंगिक है जो "अब यह कैसे किया जाता है" पर गौर करना चाहते हैं। मैंने रोवनम्बर () और सीटीई का उपयोग किया और उससे पहले केवल [कॉलम] डेसीक द्वारा 1 और ऑर्डर लेने के लिए। हालांकि हमें इसकी आवश्यकता है ...

मैं SQL सर्वर 2017 का उपयोग कर रहा हूं, हम विश्व स्तर पर सभी एक्सचेंजों पर सभी टिक रिकॉर्ड कर रहे हैं, हमारे पास एक दिन में 12 बिलियन टिक हैं, हम प्रत्येक बोली को स्टोर करते हैं, पूछते हैं, और वॉल्यूम सहित ट्रेड और टिक (बोली, पूछें, व्यापार) ) दिए गए एक्सचेंजों में से किसी का।

हमारे पास उस तालिका में किसी भी अनुबंध (ज्यादातर आँकड़े) के लिए 253 प्रकार के टिक डेटा हैं, अंतिम कारोबार की कीमत टिक टाइप = 4 है, इसलिए जब हमें हमारे द्वारा उपयोग की जाने वाली कीमत का "अंतिम" प्राप्त करने की आवश्यकता होती है:

select distinct T.contractId,
LAST_VALUE(t.Price)over(partition by t.ContractId order by created ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
from [dbo].[Tick] as T
where T.TickType=4

आप मेरे देव प्रणाली पर निष्पादन योजना को देख सकते हैं, यह काफी कुशल निष्पादित करता है, 4 सेकंड में निष्पादित करता है जबकि एक्सचेंज आयात ईटीएल डेटा को तालिका में पंप कर रहा है, वहाँ कुछ लॉकिंग मुझे धीमा कर देगा ... बस यह है कि लाइव सिस्टम कैसे काम करता है। 85,697,659 पंक्तियों के खिलाफ निष्पादन योजना


-1
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)

साइट पर आपका स्वागत है। यह एक टिप्पणी हो सकती है (यदि आपके पास रेप था), तो क्या आप यह समझने के लिए कुछ पाठ जोड़कर इसका विस्तार करेंगे कि यह कैसे समस्या को हल करता है और इसे 10 पूर्ववर्ती उत्तरों से अलग करना है?
गंग -

-5

मुझे पूरा यकीन है कि यह है:

SELECT last(column_name) FROM table

क्योंकि मैं कुछ इसी तरह का उपयोग करता हूं:

SELECT last(id) FROM Status

7
अंतिम () एसक्यूएल सर्वर के एक समारोह नहीं है
टैरिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.