2016-06-29 9 views
0

私はCreatedDateのデータベースを持っており、Unixのエポックタイムといくつかの他の情報のストアです。最後のレコードで最新の2週間のレコードベースを取得できるクエリが必要です。 以下はので、私は4月12日 最新の2週間のレコードを取得するためのSQLクエリ

4月

25に私は確信してどのように最新のデータを取得するために比較するではないからレコードをしたい、例

ID User  Ranking  CreatedDate 
------------------------------------------------------- 
1 B.Sisko  1  1461136714 
2 B.Sisko  2  1461123378 
3 B.Sisko  3  1461123378 
4 B.Sisko  3  1461600137 
5 K.Janeway  4  1461602181 
6 K.Janeway  4  1461603096 
7 J.Picard  4  1461603096 

最後のレコードのCreatedDateには、2016年4月25であるの一部ですか?どんな提案

+0

ですから、ここhttp://stackoverflow.com/questions/23994889/converting-epoch-number-to-human-readable-date-in-mysqlのような時間を変換し、MAX(ID)ができ、 MAX(Cre​​atedDate)は最新のものである必要があります。 – dmitryro

答えて

0

をそれは奇妙に思えるかもしれないが、あなたは1つが最大の日付を見つけ、14日オフをノックする2つのクエリを実行する必要があります - その後、再クエリの条件としてそれを使用しますテーブル。私はIDがOracleの予約語であり、おそらく他のRDBMSであるため、ID_NUMを使用しました。

SELECT ID_NUM, USER, RANKING, 
    TO_DATE('19700101000000', 'YYYYMMDDHH24MISS')+((CreatedDate-18000) 
    /(60*60*24)) GOOD_DATE 
    FROM MY_TABLE 
    WHERE 
    GOOD_DATE >= 
    (SELECT MAX(TO_DATE('19700101000000', 'YYYYMMDDHH24MISS')+ 
    ((CreatedDate-18000) /(60*60*24))) -14 
    FROM MY_TABLE) 
+1

'to_date()'はMySQLの機能ではありません。私はこの答えがなぜ受け入れられるのか分かりません。 –

+0

ゴードン:もちろん、あなたはmysqlタグを見逃した天才です。私が働いている世界でOPの答えを見つけるために探しました。最初のOracleと2番目のMS Accessもちろん、彼女の質問の鍵は、サブクエリ - それはおそらく彼女を幸せにしたものでした。日付処理は、おそらく最も重要な部分ではなかった –

+0

。 。 MySQLには、これらの変換のための組み込み関数があります。この答えを受け入れることは意味をなさない。計算を手動で行うのは問題ありません。営業担当者が別のデータベースに対する回答を受け入れることに決めたのは本当に奇妙なことです。 –

3

最も簡単な方法は、ちょうど今日の日付/時間から二週間を減算することはおそらくです:

where CreatedDate >= UNIX_TIMESTAMP() - 7*24*60*60 

別のアプローチは、日付/時刻に値を変換することです:

where from_unixtime(CreatedDate) >= date_sub(now(), interval 2 week) 

このアプローチの利点は、日に揃える方が簡単だということです。あなたが真夜中に始まる2週間をしたいのであれば、:

where from_unixtime(CreatedDate) >= date_sub(curdate(), interval 2 week) 

欠点は、列に関数がその列のインデックスの使用を妨げることです。

編集:

これは間違いなくあなたの質問の表現方法ではありません。しかし、その場合には、あなたが使用する必要があります。

select t.* 
from t cross join 
    (select from_unixtime(max(CreatedDate)) as maxcd from t) m 
where from_unixtime(CreatedDate) >= date_sub(maxcd, interval 2 week); 
+0

あなたの提案をお寄せいただきありがとうございます。しかし、私が得たいレコードは、今日からではなく、最後のエントリの最新の2週間レコードベースです。 @Gordon Linoff –

関連する問題