簡體   English   中英

根據ID日期按ID順序檢索不同的記錄

[英]Retrive distinct record based on ID order by Date

我有一個查詢:

select C.ChapterID, C.ChapterName, TA.TestAllotmentID, 
       T.TestName, S.StudentFname, B.BatchName, TA.UpdatedDate 
from TransTestAllotment TA,
     MstStudent S,
     MstBatchDetails B,
     MstTest T,
     MstChapter C
where TA.StudentID = 47
  and TA.BatchID = 10 
  and T.TestID = TA.TestID
  and S.StudentID = TA.StudentID
  and B.BatchID = TA.BatchID
  and T.ChapterID = C.ChapterID
  and TA.IsAttempted = 'True'
  and TA.IsEvaluated = 'True'
order by TA.UpdatedDate desc

返回結果如下。

+-----------+-----------------------+-----------------+-------------------------+
| ChapterID |      ChapterName      | TestAllotmentID |       UpdatedDate       |
+-----------+-----------------------+-----------------+-------------------------+
|        52 | HTML Basics - Part II |              37 | 2016-03-14 13:12:53.000 |
|        52 | HTML Basics - Part II |              36 | 2016-03-14 13:11:59.000 |
|        52 | HTML Basics - Part II |              35 | 2016-03-14 13:11:35.000 |
|        50 | HTML Basics - Part I  |              28 | 2016-03-11 18:45:51.000 |
|        50 | HTML Basics - Part I  |              27 | 2016-03-11 18:45:05.000 |
|        50 | HTML Basics - Part I  |              26 | 2016-03-11 18:43:48.000 |
|        50 | HTML Basics - Part I  |              24 | 2016-03-11 18:42:37.000 |
|        50 | HTML Basics - Part I  |              22 | 2016-03-11 18:41:07.000 |
+-----------+-----------------------+-----------------+-------------------------+

現在,我想根據更新日期按章ID順序檢索不同的記錄。 我期望的最終輸出是:

+-----------+-----------------------+-----------------+-------------------------+
| ChapterID |      ChapterName      | TestAllotmentID |       UpdatedDate       |
+-----------+-----------------------+-----------------+-------------------------+
|        52 | HTML Basics - Part II |              37 | 2016-03-14 13:12:53.000 |
|        50 | HTML Basics - Part I  |              28 | 2016-03-11 18:45:51.000 |
+-----------+-----------------------+-----------------+-------------------------+

如何編寫SQL查詢以獲取此輸出?

您應該修復查詢以使用正確的顯式JOIN語法。 但是,您的問題的答案是使用窗口函數:

with q as (
      <your query here>
     )
select q.*
from (select q.*,
             row_number() over (partition by chapterid order by updateddate desc) as seqnum
      from q
     ) q
where seqnum = 1;

謝謝Gordon Linoff。 我的最終查詢如下。

Select Y.* from (select X.*, row_number() over (partition by chapterid order by updateddate desc) as SequencNo from 
    (Select C.ChapterID,C.ChapterName,TA.TestAllotmentID, T.TestName,
    S.StudentFname,B.BatchName,TA.UpdatedDate
    from TransTestAllotment TA, MstStudent S, MstBatchDetails B, 
    MstTest T,MstChapter C 
    where TA.StudentID=47 and TA.BatchID=10 and 
    T.TestID=TA.TestID and S.StudentID=TA.StudentID and 
    B.BatchID=TA.BatchID and T.ChapterID=C.ChapterID and 
    TA.IsAttempted='True' and TA.IsEvaluated='True') X) Y Where SequencNo=1

我建議使用JOIN重塑查詢,然后查看是否需要其他子句:

這是一個嘗試

SELECT 
C.ChapterID, 
C.ChapterName,
FROM 
(SELECT
TA.TestAllotmentID, 
T.TestName, 
S.StudentFname, 
B.BatchName, 
TA.UpdatedDate 
FROM TransTestAllotment TA
LEFT JOIN MstStudent S ON S.StudentID=TA.StudentID
LEFT JOIN MstBatchDetails B ON B.BatchID=TA.BatchID
LEFT JOIN MstTest T ON T.TestID=TA.TestID
WHERE TA.StudentID=47
AND TA.BatchID=10 as T1
AND TA.IsAttempted='True'
AND TA.IsEvaluated='True'
ORDER BY TA.UpdatedDate desc)
LEFT JOIN MstChapter C ON  T1.ChapterID=C.ChapterID;

問候

您可以嘗試以下查詢:

select C.ChapterID, C.ChapterName, TA.TestAllotmentID, TA.UpdatedDate 
    from TransTestAllotment TA,
         MstStudent S,
         MstBatchDetails B,
         MstTest T,
         MstChapter C
    where TA.StudentID = 47
      and TA.BatchID = 10 
      and T.TestID = TA.TestID
      and S.StudentID = TA.StudentID
      and B.BatchID = TA.BatchID
      and T.ChapterID = C.ChapterID
      and TA.IsAttempted = 'True'
      and TA.IsEvaluated = 'True'
     group by  C.ChapterID, C.ChapterName, TA.TestAllotmentID, TA.UpdatedDate  
     having  (C.ChapterID,TA.TestAllotmentID) in 
     (select C1.ChapterID ,max(TA1.TestAllotmentID)  
        from TransTestAllotment TA1, MstTest T1, MstChapter C1 
        where  T1.TestID = TA1.TestID and T1.ChapterID = C1.ChapterID)
     order by TA.UpdatedDate desc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM