2016-10-18 9 views
0

クエリの生成に時間がかかる。与えられたレコードセットのイベント値の最後の行が2の場合、最後の6レコードを取得し、イベントが1である最後の5レコードIDを取得するものが必要です。与えられたレコードは、データが私のMySqlテーブル。指定されたレコードセットに基づいて最後の5または6レコードを取得する方法

テーブル構造

CREATE TABLE `timelog` (
    `timeLogId` int(11) NOT NULL AUTO_INCREMENT, 
    `event` int(1) NOT NULL, 
    PRIMARY KEY (`timeLogId`) 
) 

は、ここで述べた問題を解決する上で私の現在の試みです:

SELECT timeLogId, event FROM (SELECT * FROM timelog ORDER BY timeLogId DESC LIMIT 6) as T ORDER BY timeLogId ASC 

レコード1

timeLogId | event 
1   | 1 
2   | 2 
3   | 1 
4   | 2 
5   | 1 
6   | 2 
7   | 1 
8   | 2 

結果:

timeLogId | event 
3   | 1 
4   | 2 
5   | 1 
6   | 2 
7   | 1 
8   | 2 

レコード2

timeLogId | event 
1   | 1 
2   | 2 
3   | 1 
4   | 2 
5   | 1 
6   | 2 
7   | 1 

結果:

timeLogId | event 
3   | 1 
4   | 2 
5   | 1 
6   | 2 
7   | 1 
+0

http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-を参照してください。 for-be-a-very-simple-sql-query – Strawberry

+0

私はテーブル構造のcreate文を提供しました。 – Vilowapo

答えて

1
SELECT T2.* 
FROM 
(
SELECT T1.TIMELOGID, T1.EVENT 
FROM TIMELOG T1 
WHERE T1.TIMELOGID = (SELECT MAX(TIMELOGID) FROM TIMELOG) 
) S 
JOIN TIMELOG T2 ON 
    CASE 
    WHEN S.EVENT = 1 THEN T2.TIMELOGID >= S.TIMELOGID - 4 
    WHEN S.EVENT = 2 THEN T2.TIMELOGID >= S.TIMELOGID - 5 
    END 
; 
+0

このソリューションはどのように実現できましたか? – Vilowapo

+0

?あなたのコメントを拡大することができます –

+0

解決策はうまくいきますし、非常に感謝しますが、説明を与えることができますか? – Vilowapo

関連する問題