এসকিউএল সার্ভারের মাধ্যমে শেষ সারিটি কীভাবে পড়বেন


89

এসকিউএল সার্ভারের সাথে শেষ সারিটি পড়ার সর্বাধিক দক্ষ উপায় কোনটি?

সারণিটি একটি অনন্য কীতে সূচিযুক্ত - "নীচে" কী মানগুলি সর্বশেষ সারিটি উপস্থাপন করে।

উত্তর:


181

আপনি যদি এমএস এসকিউএল ব্যবহার করেন তবে আপনি চেষ্টা করতে পারেন:

SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC 

17
ডিবিতে যদি আপনার 5 মিলিয়ন রেকর্ড থাকে! : - \
ডিপডাইভ

4
যদি সারণিটি সাজানো কলামে সূচিযুক্ত করা হয়, তবে এসকিউএল সারণির শেষ সারিটি পড়বে। কোনও ব্যয়বহুল বাছাই বা পূর্ণ টেবিল স্ক্যানের প্রয়োজন নেই।
স্পাইভিনিয়াস

আমি কীভাবে পেলাম তা শেষ 1000 রেকর্ড পেতে হলে আপনি বলতে পারেন
শ্রী

4
@ শ্রী আপনি চালিত করবেন 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আপনার টেবিল সূচক
ক্লিফ বার্টন

4
যদি mykeyঅনন্য পরিচয়কারী হয় তবে এই পদ্ধতির কোনও
উপকার

18

আপনার টেবিলটিতে স্বতঃপূরণ প্রাথমিক কী বা একটি ডেটটাইম কলাম (পছন্দমতো প্রাথমিক কী) এর মতো এক ধরণের স্বতন্ত্ররূপে কলাম সনাক্ত করতে হবে। তারপরে আপনি এটি করতে পারেন:

SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1

ORDER BY columnএটা বলে যে কলামের তথ্য অনুযায়ী ফলাফল rearange, এবং DESCবলা হয়েছে যে সব ফলাফল বিপরীত (সুতরাং প্রথম গত এক নির্বাণ)। এর পরে, LIMIT 1ডায়াগুলি এটিকে কেবল এক সারি পিছনে যেতে বলে।


4
বাহ, কঠোর, মূল প্রশ্নটি বিশেষত এসকিউএল সার্ভারকেও বলে নি। উপরের সমাধানটি সম্পূর্ণরূপে বৈধ যদিও এসকিউএল সার্ভার একই ধারণাটি বর্ণনা করতে বিভিন্ন শব্দ ব্যবহার করে। +1
গ্রেগ হিউগিল

@ ভিঙ্কো ভার্সালোভিচ এর অর্থ এই নয় যে উত্তর একদম দশক পরেও বিপরীতভাবে অনর্থক। স্যার, আপনি কি আমার সাথে একমত হন?
স্নার

4
এটি লিখিত যোগাযোগের ক্ষেত্রে সমস্যা - এটি যা লক্ষ্য করা হয়েছে তার চেয়ে বেশি কঠোরভাবে এটি পড়া সহজ, বিশেষত যখন সংক্ষিপ্তসার! আমি এখন এটি জানি এবং আমি বুঝতে পারি যে লেখকটি অনূদিত। সুতরাং, যদি আমি আজ এটি লিখতাম তবে আমি বলব: "এটিই ধারণা, যদিও আপনাকে এসকিউএল সার্ভারের জন্য সীমাবদ্ধতার পরিবর্তে টপ ব্যবহার করতে হবে, কারণ ডিএমবিএস ইঞ্জিনটি প্রশ্নটিতে ট্যাগ হয়েছে doc দেখুন ডকস.মাইক্রোসফটকম.কম / এন- ইউএস / এসকিএল / টি- এসকিএল / কোয়েরি /… "@ এসএনআর
ভিঙ্কো ভার্সালোভিক

11

যদি আপনার কিছু আইডি ক্রমযুক্ত থাকে তবে আমি ধরে নিচ্ছি আপনার ডিবিতে কিছু অর্ডার থাকবে

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


4

আমি মনে করি নীচের কোয়েরিটি কোনও বাছাইযোগ্য কলাম ছাড়াই সর্বোচ্চ কার্যকারিতা সহ এসকিউএল সার্ভারের জন্য কাজ করবে

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

আশা করি আপনি এটি বুঝতে পেরেছেন ... :)


আপনি DESC কে বাছাই করতে না পারলে এটিই সেরা সমাধান এবং ফিরে আসার সাথে সাথে আপনার শেষ সারিটি দরকার।
jjthebig1

3

আমি এসকিউএল সার্ভার ২০০৮ এ শেষ স্কেল ক্যোয়ারীটি ব্যবহার করার চেষ্টা করেছি তবে এটি এই ত্রুটিটি দেয়: "'শেষ' কোনও স্বীকৃত অন্তর্নির্মিত ফাংশন নাম নয়" "

সুতরাং আমি ব্যবহার করে শেষ করেছি:

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

আপনি সর্বশেষ_মূল্যটি ব্যবহার করতে পারেন: SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...

আমি এটি আমার ডেটাবেসগুলির একটিতে পরীক্ষা করে দেখি এবং এটি প্রত্যাশা অনুযায়ী কাজ করেছিল।

আপনি এখানে ডকুমেন্টেশনও যাচাই করতে পারেন: https : //msdn.mic Microsoft.com/en-us/library/hh231517.aspx


2

এটা চেষ্টা কর

SELECT id from comission_fees ORDER BY id DESC LIMIT 1

4
@ ভিঙ্কো ভ্র্যাসালোভিচের উপরের মন্তব্য হিসাবে বলেছেন যে এমএসএসকিউএল ব্যবহার করে না LIMIT। এই ফিরে আসেIncorrect syntax near LIMIT
frmbelz

1

এমএস এসকিউএল ডাটাবেস 2005 এর জন্য একটি সারণির শেষ সারিটি পুনরুদ্ধার করতে, আপনি নিম্নলিখিত কোয়েরিটি ব্যবহার করতে পারেন:

select top 1 column_name from table_name order by column_name desc; 

দ্রষ্টব্য: এমএস এসকিউএল ডাটাবেস 2005 এর জন্য সারণির প্রথম সারিটি পেতে, আপনি নিম্নলিখিত কোয়েরিটি ব্যবহার করতে পারেন:

select top 1 column_name from table_name; 

4
select top 1অর্ডার ব্যতীত প্রথম রেকর্ড পাওয়ার কোনও নির্ভরযোগ্য উপায় নয়। আপনি যদি কোনও অর্ডার না দিয়ে থাকেন তবে আপনি এসকিউএলকে যে কোনও রেকর্ড এটি খুশি করার জন্য অনুমতি দেন।
কোড যাদুকর

1

OFFSETএবং FETCH NEXTফলাফল প্রদর্শন করার সময় এসকিউএল পেজিং অর্জনের জন্য এসকিউএল সার্ভার 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)

4
সর্বোত্তম উত্তর একইভাবে আমরা কর্মচারীদের কাছ থেকে প্রথম সারিতে SELECT * পেতে পারি যেখানে [কর্মচারী আইডি] = কর্মচারীদের কাছ থেকে সমস্ত নির্বাচন করুন ([এমপ্লয়ী আইডি])
মানস

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 এবং অর্ডার নিতে। তবে আমাদের দরকার নেই ...

আমি এসকিউএল সার্ভার 2017 ব্যবহার করছি, আমরা বিশ্বব্যাপী সমস্ত এক্সচেঞ্জগুলিতে সমস্ত টিক্স রেকর্ড করছি, আমাদের দিনে একশ 12 বিলিয়ন টিক আছে, আমরা প্রতিটি বিড সঞ্চয় করি, জিজ্ঞাসা করি এবং খণ্ডের বৈশিষ্ট্য এবং টিকের বৈশিষ্ট্যগুলি সহ (বিড, জিজ্ঞাসা, বাণিজ্য) ) প্রদত্ত যে কোনও এক্সচেঞ্জের মধ্যে।

সেই টেবিলে যে কোনও চুক্তির জন্য আমাদের বেশিরভাগ টিকিটের ডেটা রয়েছে (বেশিরভাগ পরিসংখ্যান), সর্বশেষ ব্যবসায়ের দামটি টিক টাইপ = 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 সেকেন্ডে এক্সিকিউট করে এক্সচেঞ্জ আমদানি ইটিএল টেবিলের মধ্যে ডেটা পাম্প করে, সেখানে কিছুটা লক হয়ে যাবে আমাকে হতাশ করে ... ঠিক এভাবেই লাইভ সিস্টেমগুলি কাজ করে work 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
শেষ () স্কেল-সার্ভারের কোনও কাজ নয়
তারিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.