2017-04-25 64 views
0

我還沒有關於DBA的知識。 我是一名ios開發人員,我對DBA有一個問題。按時間排序使用當前時間?

`SELECT StartDate,Subject 
FROM tbl_Calendar 
WHERE StartDate BETWEEN ` date('2017-04-25') AND ('2017-04-26') 

This is My Table Data

例如:1

,如果目前的時間是13:30:00

給我這個順序3,4,5,2,1

例如:2

如果目前的時間是12:35:00

給我這個順序2,3,4,5,1

例如:3

,如果目前的時間11: 35:00

給我這個順序1,2,3,4,5

這是我的表sql:

CREATE TABLE `tbl_Calendar` (
    `StartDate` datetime, 
    `Subject` ntext 
); 

任何幫助將不勝感激。

+0

這種排序背後的原因是什麼?絕對差距? –

+0

這是一個事件sedule,所以如果當前時間是12:30,這意味着12:00正在進行中(打印第一),下一個作品是1:00(打印第二),下一個或下一個和最後一個作品完成 –

+1

如果你不喜歡沒有指定一個ORDER BY子句,這個排序實際上是未定義的(無論它看起來多麼可重複)。如果您想要特定訂單,請添加適當的'ORDER BY'。 – TripeHound

回答

2

你可以在你的ORDER BY使用CASE這樣的:

SELECT 
     StartDate, Subject 
    FROM 
     tbl_Calendar 
    WHERE 
     StartDate BETWEEN DATE ('2017-04-25') AND ('2017-04-26') 
    ORDER BY 
     CASE WHEN ((StartDate < DATETIME('now', 'localtime')) AND (StartDate <> (SELECT StartDate FROM tbl_Calendar WHERE StartDate < DATETIME ('now', 'localtime') ORDER BY StartDate desc limit 1))) THEN DATETIME (StartDate, '+1 day') ELSE StartDate END; 

CASE中的子查詢將忽略正在運行的事件記錄並僅更改以前的記錄。

+0

好的謝謝你讓我支票 –

+0

我檢查這對我很好,因爲。目前我爲此編寫循環並打印此文件:D。當我的客戶批准這一點時,我批准你的答案。 –

+0

@HarshilKotecha沒問題。很高興幫助你。 –

0

您可以通過表達ORDER BY所以使用CASE,日期時間函數只是包裝你的邏輯在簡單的表達,你是好去

+0

請給出查詢 –

+0

是你附近的答案,但我沒有關於SQL的知識,所以不能理解你的理論是寫但我不想查詢。 (順便謝謝) –