3

今日の日付を使用してタスクのステータスを計算する SQL ステートメントを作成するにはどうすればよいでしょうか。

これは返すべきだと思います:

1 = complete task (status = completed)
2 = pending task (in the future and not status=completed) 
3 = overdue task (in the past and set to pending)

テーブル SQL:

CREATE TABLE IF NOT EXISTS `tasks` (
  `task_id` int(10) NOT NULL AUTO_INCREMENT,
  `task_date` date DEFAULT NULL,
  `task_status` enum('pending','approved','complete','cancelled') NOT NULL
  PRIMARY KEY (`task_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
4

3 に答える 3

1

定義済みの一連のステータスを動的に計算されたステータスで拡張するだけの場合は、'overdue'条件が 1 つだけの CASE 式で十分です。

SELECT
  ...
  CASE
    WHEN task_status = 'pending' AND task_date > CURDATE()
    THEN 'overdue'
    ELSE task_status
  END AS task_status,
  ...
FROM tasks
WHERE
  ...
于 2012-09-20T20:03:10.937 に答える
0

これらの行の何か:

SELECT 
    CASE 
        WHEN task_status = 'complete' THEN 'Complete Task'
        WHEN status != 'complete' AND task_date > NOW() THEN 'Pending Task'
        WHEN status = 'pending' AND task_date < NOW() THEN 'Overdue Task'
FROM 
    tasks

NOW()必要に応じて、同等のMySQLに置き換える必要があります。

于 2012-09-20T18:25:43.340 に答える
0

私は以下を使用します:

SELECT task_id, task_date, 
  CASE 
    WHEN task_status = 'complete' THEN 'completed task'
    WHEN task_status != 'complete' AND task_date > CURDATE() THEN 'pending task'
    WHEN 
      (task_status != 'complete' AND task_date <= CURDATE()) 
      OR (task_status = 'pending') THEN 'pending task'
  END AS task_status_str
FROM 
  tasks
于 2012-09-20T18:35:33.827 に答える