SQL सर्वर के साथ अंतिम पंक्ति को पढ़ने का सबसे कुशल तरीका क्या है?
तालिका को एक अद्वितीय कुंजी पर अनुक्रमित किया जाता है - "नीचे" कुंजी मान अंतिम पंक्ति का प्रतिनिधित्व करते हैं।
जवाबों:
यदि आप MS SQL का उपयोग कर रहे हैं, तो आप कोशिश कर सकते हैं:
SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC
SELECT TOP 1000 * FROM table_name ORDER BY column_name DESCऔर पिछले 1000 रिकॉर्ड का उत्पादन करना चाहिए।
select whatever,columns,you,want from mytable
where mykey=(select max(mykey) from mytable);
mykeyआपका टेबल इंडेक्स है
mykeyअद्वितीय पहचानकर्ता यह दृष्टिकोण मदद नहीं करेगा
आपको अपनी तालिका में विशिष्ट पहचान करने वाले कॉलम की आवश्यकता होगी, जैसे ऑटो-फिलिंग प्राथमिक कुंजी या डेटाइम कॉलम (अधिमानतः प्राथमिक कुंजी)। तो आप यह कर सकते हैं:
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
ORDER BY columnयह बताता है कि स्तंभ के आंकड़ों के अनुसार परिणाम rearange करने के लिए, और DESCयह बताता है परिणाम उल्टा करने के लिए (इस प्रकार पहले पिछले एक डाल)। उसके बाद, LIMIT 1इसे केवल एक पंक्ति में वापस जाने के लिए कहता है।
यदि आपकी कुछ आईडी क्रम में हैं, तो मुझे लगता है कि आपके डीबी में कुछ ऑर्डर होगा
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
मुझे लगता है कि नीचे क्वेरी बिना किसी छांटे कॉलम के अधिकतम प्रदर्शन के साथ SQL सर्वर के लिए काम करेगी
SELECT * FROM table
WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1
FROM table)
ID
FROM table)
आशा है आप समझ गए होंगे ... :)
मैंने 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)
आप last_value का उपयोग कर सकते हैं: SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...
मैं इसे अपने डेटाबेस में से एक पर परीक्षण करता हूं और यह उम्मीद के मुताबिक काम करता है।
आप यहाँ पर डी डॉक्युमेंट भी देख सकते हैं: https://msdn.microsoft.com/en-us/library/hh231517.aspx
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;
select top 1बिना किसी आदेश के पहले रिकॉर्ड प्राप्त करने का एक विश्वसनीय तरीका नहीं है। यदि आप एक आदेश में नहीं डालते हैं, तो आप SQL को अनुमति देते हैं कि वह आपको कोई भी रिकॉर्ड दे सके।
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
यह है कि आप पिछला रिकॉर्ड कैसे प्राप्त करते हैं और एक्सेस डीबी में एक फ़ील्ड अपडेट करते हैं।
अपडेट करें compalints SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )
यदि आपके पास कोई आदेशित कॉलम नहीं है, तो आप प्रत्येक लाइनों की भौतिक आईडी का उपयोग कर सकते हैं:
SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot],
T.*
FROM MyTable As T
order by sys.fn_PhysLocFormatter(%%physloc%%) DESC
यदि आपके पास एक प्रतिकृति तालिका है, तो आपके पास क्लाइंटडेटाबेस में एक पहचान = 1000 लोकलडॉटबेस और आइडेंटिटी 2000 में हो सकती है, इसलिए यदि आप अंतिम आईडी को पकड़ते हैं, तो आपको हमेशा क्लाइंट से अंतिम मिल सकता है, वर्तमान कनेक्टेड डेटाबेस से अंतिम नहीं। तो सबसे अच्छा तरीका है जो अंतिम जुड़ा डेटाबेस लौटाता है:
SELECT IDENT_CURRENT('tablename')
अच्छी तरह से मुझे एक तालिका में "अंतिम मान" नहीं मिल रहा है, मुझे प्रति वित्तीय साधन अंतिम मूल्य मिल रहा है। यह वही नहीं है, लेकिन मुझे लगता है कि यह कुछ ऐसे लोगों के लिए प्रासंगिक है जो "अब यह कैसे किया जाता है" पर गौर करना चाहते हैं। मैंने रोवनम्बर () और सीटीई का उपयोग किया और उससे पहले केवल [कॉलम] डेसीक द्वारा 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 सेकंड में निष्पादित करता है जबकि एक्सचेंज आयात ईटीएल डेटा को तालिका में पंप कर रहा है, वहाँ कुछ लॉकिंग मुझे धीमा कर देगा ... बस यह है कि लाइव सिस्टम कैसे काम करता है।

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