2017-04-08 10 views
0

sqliteの生のクエリでは、どのくらい近いかに基づいて日付を並べ替えることができる必要があります。私のsqliteステートメントで何が問題になっていますか? datedayを想定し時刻順Sqlite今すぐ最寄りの順

public Cursor GetFirstTime(){ 
    Calendar c = Calendar.getInstance(); 
    int seconds = c.get(Calendar.MILLISECOND); 
    SQLiteDatabase sqLiteDatabase = this.getWritableDatabase(); 
    Cursor nextTime = sqLiteDatabase.rawQuery("select * from timemanager_table where " + seconds + " >= dateday ORDER BY dateday Limit 5",null); 
    return nextTime; 
} 
+0

'dateday'はミリ秒単位ですか? 「秒」という名前の変数をミリ秒単位で割り当てたのはなぜですか? –

+2

テーブルに過去10分と5分の行があり、3分後と7分後の場合には、「どれくらい近づいているかに基づいて並べ替えるようにしてください。 、5(過去)、7(将来)、10(過去)?そうでない場合は、通常の並べ替えが欲しいだけで、「近くに」は意味がありません。 – Andreas

+0

この質問は明確ではありません。過去、現在、そして未来の瞬間を扱っていますか?もしそうなら、Andreasによるコメントを述べてください。 –

答えて

1

は(あなたがJavaのカレンダーを必要としない)、あなたはSQLで完全にこれを行うことができ、秒です。

このクエリは、これまでの最初の5つの要素を検索します。言い換えれば

SELECT * 
FROM timemanager_table 
WHERE dateday <= strftime('%s', 'now') 
ORDER BY dateday DESC 
LIMIT 5 

datedayは、他のいくつかの形式(のようなYYYY-MM-DD)である場合、あなたはおそらく、それをstrftimeする必要がありますSQLite Date & Time functions

を参照してください。


あなたが「今に近い」に基づいてソートする必要がある場合は、いくつかの日付の減算を行う必要があります。将来的にそれらのために今の過去、0のもののために負の値、正の値を持つ追加の列を追加します

SELECT *, dateday - strftime('%s', 'now') AS time_diff 
FROM timemanager_table 
ORDER BY time_diff DESC 
LIMIT 5 

関連する問題