0

私はこのようなdb構造を持っています -

表 : タスク

列: TaskID、TaskDescription、TaskCreatedDate

したがって、現在のタイムスタンプに最も近い値を見つけたい場合TaskCreatedDate、現在のタイムスタンプよりも大きな値を持つタスクが存在しない場合は、現在のタイムスタンプにTaskCreatedDate最も近い小さな値を見つけます。これは単一のクエリで行う必要があります。これどうやってするの?

助けてください。前もって感謝します

4

5 に答える 5

1
-- IN ONE GO
select t.*, coalesce( (select TaskCreatedDate from Tasks where TaskCreatedDate > t.TaskCreatedDate ORDER BY TaskCreatedDate ASC LIMIT 1),
                      (select TaskCreatedDate from Tasks where TaskCreatedDate < t.TaskCreatedDate ORDER BY TaskCreatedDate DESC LIMIT 1)
            )
  from Tasks as t

合体により、最初の条件が null の場合に 2 番目の条件を返すことができます

于 2013-05-30T13:46:16.327 に答える
0

これはどうですか?

SELECT *
FROM Tasks
ORDER BY (CASE WHEN TIMEDIFF(TaskDueDate, CURRENT_TIMESTAMP()) > 0 THEN 0 ELSE 1 END), 
    (CASE WHEN TIMEDIFF(TaskDueeDate, CURRENT_TIMESTAMP()) > 0
        THEN TIMEDIFF (TaskDueeDate, CURRENT_TIMESTAMP())
        ELSE TIMEDIFF (CURRENT_TIMESTAMP(), TaskDueDate)
     END)

これにより、将来の期日を持つすべてのタスクが日付の昇順で並べられ、その後に過去の期日を持つタスクが降順で並べられます。1 つのタスクのみが必要な場合LIMIT 1は、最後に追加します

于 2013-05-30T13:53:11.557 に答える
0

今より後の最初のタスク (存在する場合) と、今より前の最後のタスクの和集合を取得し、最初の結果を保持します。

(select TaskId, TaskDescription, TaskDueDate from Tasks
        where TaskDueDate >= now() 
        order by TaskDueDate
        limit 1)
union
(select TaskId, TaskDescription, TaskDueDate from Tasks
        where TaskDueDate < now() 
        order by TaskDueDate desc
        limit 1)
limit 1
于 2013-05-30T13:48:13.443 に答える
0

十分に理解できるコードがないため、以下を試すことができます。

select      *
from        Tasks 
order by    cast([TaskDueDate] as datetime) asc

CASTまたはCONVERTは、値をあるデータ型から別のデータ型に明示的に変換します。

于 2013-05-30T13:39:39.567 に答える
0

これには巧妙なorder by句が必要です。

select *
from tasks
order by  TaskCreatedDate > now() desc,
         (case when TaskCreatedDate > now() then TaskCreatedDate end) asc,
         (case when TaskCreatedDate < now() then TaskCreatedDate end) desc
limit 1;

CURRENT_TIMESTAMP型の定義方法によっては、の代わりに使用したい場合がありますnow()

order by の最初の句は、最初に将来の日付を注文し、次に過去の日付を注文します。2 番目は、将来の日付を TaskCreatedDate の昇順で並べるため、最も近い日付が最初になります。何もない場合は、3 番目が機能し、残りを降順で並べます。

于 2013-05-30T13:46:06.857 に答える