MySQL вопрос заказа с использованием поля даты и статуса - PullRequest
0 голосов
/ 13 сентября 2018

Нужны идеи о наиболее эффективном способе заказа некоторых предметов / событий на основе даты и статуса.

В настоящее время у меня есть следующий запрос.

select tevent.ID, tevent.ename, e_dates.edate, tevent.status, tevent.eactive  from tevent 
LEFT JOIN e_dates on tevent.ID=e_dates.EID) Where tevent.status <> 'delete' and tevent.eactive ='Y'  group by tevent.id order 
by (case when tevent.status = 'closed' and e_dates.edate >= curdate() then 0 
else 1 end), edates.edate desc

Я использовал случай, ноон упорядочил статус, затем по дате, что смущает людей.

Ниже вывод

+----+--------------+-----+-----------+
| ID |Edate           | Ename   | Status  | 
+----+--------------+-----+-----------+
|  2  | 2018-09-21    | Event2  | Closed  |
|  5  | 2018-09-15    | Event5  | Closed  | 
|  3  | 2018-12-12    | Event3  | Open    |
|  6  | 2018-10-25    | Event6  | Approved|
|  4  | 2018-10-25    | Event4  | Open    |
|  7  | 2018-10-15    | Event7  | Pending |
|  10 | 2018-10-01    | Event10 | Open    |
|  1  | 2018-09-30    | Event1  | Open    |
|  4  | 2018-09-30    | Event4  | Open    |
|  8  | 2018-09-01    | Event8  | Closed  |
|  11 | 2018-08-25    | Event11 | Closed  |
+----+--------------+-----+-----------+

РЕДАКТИРОВАНИЕ: Что я пытаюсь сделать, это перечислитьзакрытые события, в которых дата события предшествует дате события, остаются на вершине.IE (ID 2 и ID 5)

Но нужно, чтобы ASC отображал статус события ОТКРЫТО, УТВЕРЖДЕНО, ОЖИДАЕТ в хронологическом порядке.

и закрытое событие, в котором дата события (edate) после текущей даты (now ()) указана внизу

Например:

   +----+--------------+-----+-----------+
    | ID |Edate           | Ename   | Status  | 
    +----+--------------+-----+-----------+
    |  2  | 2018-09-21    | Event2  | Closed  |
    |  5  | 2018-09-15    | Event5  | Closed  | 
    |  1  | 2018-09-30    | Event1  | Open    |*
    |  4  | 2018-09-30    | Event4  | Open    |*
    |  10 | 2018-10-01    | Event10 | Open    |*
    |  7  | 2018-10-15    | Event7  | Pending |*
    |  4  | 2018-10-25    | Event4  | Open    |*
    |  6  | 2018-10-25    | Event6  | Approved|*
    |  3  | 2018-12-12    | Event3  | Open    |*
    |  11 | 2018-08-25    | Event11 | Closed  |    
    |  8  | 2018-09-01    | Event8  | Closed  |
    +----+--------------+-----+-----------+

1 Ответ

0 голосов
/ 14 сентября 2018

Я думаю, вы были почти правы.Вам нужно три варианта в вашем случае: 0 для всех закрытых сверху, 2 для всех закрытых внизу и 1 для всего остального посередине.Затем удалите desc для даты, чтобы получить дату, которая будет возрастать внутри каждого раздела, чтобы ваш заказ по предложению выглядел так:

order by (
    case when tevent.status = 'closed' and e_dates.edate >= curdate() then 0 
    when tevent.status = 'closed' and e_dates.edate < curdate() then 2
    else 1 end
), edates.edate

Или вы можете написать то же самое, что и

order by (
    case when tevent.status = 'closed' 
        then case when e_dates.edate >= curdate() then 0 else 2 end
    else 1 end
), edates.edate
...