1
table(ms_replies)  
|------------------------------------------|
| id | ticketID |  replyStamp              |
|------------------------------------------|
| 1  |  7       | Tue 11 Oct 2011, 8:56am  |
| 2  |  7       | Wed 12 Oct 2011, 9:20am  |
| 3  |  8       | Wed 12 Oct 2011, 16:24pm |
| 4  |  7       | Thu 27 Oct 2011, 20:28pm |
| 5  |  8       | Tue 18 Oct 2011, 9:54am  |
|------------------------------------------|

私がこれまでに持っているコードは次のとおりです。

SELECT 
    ticketID,
    MAX(replace(replace(replyStamp, 'pm',''), 'am','')) AS time
FROM 
    ms_replies 
WHERE 
    `ticketID` IN ($IDs)
GROUP BY 
    ticketID

ただし、これは最新のエントリを返しません。

replaceam | を削除するには、クエリの が必要であることに注意してください。午後、これは私の行為ではありませんが、残念ながら変更できません。

4

3 に答える 3

0

文字列を日付として比較する場合は、文字列を日付に変換する必要があります。

SELECT ticketID,
         MAX(STR_TO_DATE(
           REPLACE(REPLACE(replyStamp, 'am', ''), 'pm', ''), 
           '%a %d %b %Y, %T')) AS max_time
    FROM ms_replies 
   WHERE ticketID IN (7, 8)
GROUP BY ticketID;

ただし、最新のエントリに常に最大IDがある場合(サンプルのように)、実際には必要ありません。@ZaneBienの回答のように、代わりに MAX(id) をチェックすることができます-またはここで:

SELECT m.ticketID, m.replyStamp
  FROM ms_replies AS m
 WHERE m.id = (
         SELECT MAX(id) FROM ms_replies 
         WHERE ticketID = m.ticketID
       );
于 2012-07-09T09:55:37.747 に答える
0

group は、チケットIDによってそれらを減らすときに最初のレコードを取ると思います(あなたが知っているように)チケットID DESCでそれらを並べ替えてみてください

于 2012-07-09T09:39:39.827 に答える
0

この解決策を使用してください:

SELECT a.ticketID, a.replyStamp
FROM ms_replies a
INNER JOIN 
(
    SELECT MAX(id) AS maxid
    FROM ms_replies
    WHERE ticketID IN ($IDs)
    GROUP BY ticketID
) b ON a.ticketID = b.maxid

ところで、実際にはreplyStamp列を文字列ではなくTIMESTAMPorDATETIME型にする必要があります。そうすれば、あらゆる種類の日付/時刻計算を行うことができます。

于 2012-07-09T09:39:53.780 に答える