2

複数のエントリに対して同じチケット番号を持つことができるテーブルがあります。列の開始に基づいて、(同じチケット番号の) 最新のチケット番号を取得したいと考えています。

Ticket  VendorTicket  InitiatedOn              Comments
198165  test          2012-08-10 16:31:33.707  test
199485  sagar         2012-08-11 12:36:25.720  sagar
199485  sagar1        2012-08-11 14:36:25.720  sagar1
199478  kishor        2012-08-11 12:37:21.923  kishor

ストアド プロシージャの T-SQL でこのクエリを作成しました。xObj = {"Incorrect syntax near '.'."}

私の T-SQL

`@SQL='Select ''<a href="javascript:editTicketByIDAction('' + CONVERT(VarChar(Max), Ticket) + '')">'' + CONVERT(VarChar(Max),Ticket) + ''</a>'' t1.Ticket,t1.VendorTicket[Vendor Ticket],t1.Comments 
From VendorTickets t1 
WHERE NotifyOn <= GetDate() And NotifyOn Is Not Null AND 
NOT EXISTS
(SELECT * FROM VendorTickets t2 
WHERE t1.Ticket = t2.Ticket AND t1.InitiatedOn < t2.InitiatedOn)'`
4

6 に答える 6

2

この問題の一般的な解決策(任意のデータベースで機能します)は次のとおりです。

SELECT * FROM [my_table] t1
WHERE NOT EXISTS (
  SELECT * FROM [my_table] t2
  WHERE t1.Ticket = t2.Ticket
  AND t1.InitiatedOn < t2.InitiatedOn
)

Ticketこれは次のようになります。同じIDでより新しい日付のチケットがない場合、my_tableからすべての値を取得します。

ノート:

  • InitiatedOnこれにより、同じ値の「最新の」チケットが2つある場合に、重複が返されることがあります。
  • と列の両方に適切なインデックスがあることを確認してTicketくださいInitiatedOn
于 2012-08-13T08:35:36.433 に答える
1
SELECT   Ticket,
         VendorTicket,
         InitiatedOn,
         Comments
FROM     (
         SELECT   Ticket,
                  VendorTicket,
                  InitiatedOn,
                  Comments, 
                  ROW_NUMBER() OVER (PARTITION BY Ticket ORDER BY InitiatedOn DESC) AS Row
         FROM     Table
         ) AS Q
WHERE    Q.Row = 1
于 2012-08-13T08:36:17.997 に答える
1

これを試して:

これにより、各グループの最新のレコードが得られます

select * from  <table> t join
(select Ticket,max(InitiatedOn) as InitiatedOn
from <table>
group by Ticket)a
on t.Ticket=a.Ticket
and t.InitiatedOn=a.InitiatedOn
于 2012-08-13T08:34:20.720 に答える
0
Select t1.* 
from tickets t1 
left join tickets t2 on (t1.ticket = t2.ticket and t2.initiatedon > t1.initiatedon)
where t2.ticket is null;
于 2012-08-13T08:36:13.040 に答える
0

ご利用いただける場合row_number() over()

select T.Ticket,
       T.VendorTicket,
       T.InitiatedOn,
       T.Comments
from (
     select Ticket,
            VendorTicket,
            InitiatedOn,
            Comments,
            row_number() over(partition by Ticket order by InitiatedOn desc) as rn
     from YourTable
     ) T
where T.rn = 1
于 2012-08-13T08:34:56.520 に答える
-1
select * from table where ticket=199485 order by InitiatedOn desc limit 1;
于 2012-08-13T08:34:14.203 に答える