এসকিউএল সর্বাধিক সাম্প্রতিক তারিখ অনুসারে সারি নির্বাচন করছে


106

নিম্নলিখিত কোয়েরি এবং ফলাফলগুলি ব্যবহার করে আমি সর্বাধিক সাম্প্রতিক প্রবেশের সন্ধান করছি যেখানে চার্জআইডি এবং চার্জটাইপটি অনন্য।

select chargeId, chargeType, serviceMonth from invoice

    CHARGEID    CHARGETYPE  SERVICEMONTH
1   101     R       8/1/2008
2   161     N       2/1/2008
3   101     R       2/1/2008
4   101     R       3/1/2008
5   101     R       4/1/2008
6   101     R       5/1/2008
7   101     R       6/1/2008
8   101     R       7/1/2008

আকাঙ্ক্ষিত:

    CHARGEID    CHARGETYPE  SERVICEMONTH
1   101     R       8/1/2008
2   161     N       2/1/2008

উত্তর:


147

আপনি টাইপ এবং আইডি দ্বারা আইটেমগুলি গ্রুপ করতে একটি গ্রুপ বাই ব্যবহার করতে পারেন । তারপরে আপনি সর্বাধিক সাম্প্রতিক পরিষেবা মাস পেতে MAX () সমষ্টি ফাংশনটি ব্যবহার করতে পারেন । নীচে চার্জআইড, চার্জটাইপ এবং মোস্টরেসেন্টসওয়ারসমনথের সাথে একটি ফলাফল সেট প্রদান করে

SELECT
  CHARGEID,
  CHARGETYPE,
  MAX(SERVICEMONTH) AS "MostRecentServiceMonth"
FROM INVOICE
GROUP BY CHARGEID, CHARGETYPE

1
আপনার প্রবাহের স্রোতের প্রয়োজনে ম্যাক্স (সার্ভিসমাউন্ট) ক্ষেত্রটি উপস্থাপন করতে ভুলবেন না।
বেন হফস্টেইন

2
ঠিক আছে, তাহলে টেবিলে 101 এন 1/1/2008 সারি থাকলে কী হবে?
tvanfosson

3
আপনি একটি অতিরিক্ত সারি ফিরে পেতে হবে। যা তার প্রয়োজনীয়তার ভিত্তিতে কাঙ্ক্ষিত ফলাফল result
কার্লটন জেন্কে

1
পোস্টে ক্যোয়ারিতে উপনাম যুক্ত হয়েছে। tvanfosson - এটি শর্তসাপেক্ষ যে ফলাফল সেট যোগ, যা সঠিক।
মিচেল বিক্রেতারা

1
আমি চাইলে এটির সাথে রেকর্ড আইডিও টানতে পারি। আমি যে কিভাবে করতে হবে?
ডনি ভি।

58

সুতরাং এটি অনুরোধকারী যা চাইছিল তা নয় তবে এটি "অতি সাম্প্রতিক তারিখ অনুসারে এসকিউএল সারি নির্বাচন করা" এর উত্তর।

Http://wiki.lessthandot.com/index.php/ পুনরুদ্ধার_এ_ম্যাক্সিমিমাম_ভ্যালু_ফোর_এ_রো থেকে পরিবর্তন করা হয়েছে

SELECT t.chargeId, t.chargeType, t.serviceMonth FROM( 
    SELECT chargeId,MAX(serviceMonth) AS serviceMonth
    FROM invoice
    GROUP BY chargeId) x 
    JOIN invoice t ON x.chargeId =t.chargeId
    AND x.serviceMonth = t.serviceMonth

2
ধন্যবাদ! এটাই আমি খুঁজছিলাম!
ডায়ানা

মতামতের সাথে সামঞ্জস্যপূর্ণ বলে মনে হচ্ছে না।
nuzolilo


6

আমি দেখতে পাচ্ছি বেশিরভাগ বিকাশকারীরা বিশাল ডেটার উপর এর প্রভাব কী তা খুঁজে না দেখে ইনলাইন ক্যোরি ব্যবহার করে।

সাধারণভাবে আপনি এটি দ্বারা এটি অর্জন করতে পারেন:

select a.chargeId, a.chargeType, a.serviceMonth 
from invoice a
left outer join invoice b
on a.chargeId=b.chargeId and a.serviceMonth <b.serviceMonth 
where b.chargeId is null
order by a.serviceMonth desc

1
select to.chargeid,t0.po,i.chargetype from invoice i
inner join
(select chargeid,max(servicemonth)po from invoice 
group by chargeid)t0
on i.chargeid=t0.chargeid

উপরের ক্যোয়ারীটি যদি পৃথক চার্জ আইডিতে বিভিন্ন চার্জটাইপ সংমিশ্রণগুলি ব্যবহার করে তবে কাজ করবে opeহয় এই সাধারণ ক্যোয়ারিতে সামান্য পারফরম্যান্স সময় বিবেচনায় সহায়তা করে ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.