****のMySQLの痛みについて助けが必要です...とにかく、次のSQLを取得しました:
SELECT id,count(*),
CASE
WHEN count(*) > 1 THEN
// I need the minimal `taskdate_time` column from the selected rows
// where a certain boolean is active
ELSE taskdate_time
END
FROM timehistory th
WHERE `send`=true
GROUP BY date_format(taskdate_time, "%Y-%m-%d"), user_id
removed
コメントで説明されているように、呼び出された列がそうでない2つの行の最も早いタイムアウトを取得する必要がありますFALSE
どうすればこれを達成できますか?
私の列は次のとおりです。
`id` - int
`taskdateuser_id` int
`user_id` int
`changed_by` int
`batch_id` int
`taskdate_time` timestamp
`send` tinyint
`isread` tinyint
`update` tinyint
`removed` tinyint
よろしくお願いします!!!
編集:
もう少し説明するかもしれません。次の表の行を取得した場合:
赤でマークされた行は、group by によって返される行が 2 つあるため、CASE count(*) > 1 によってキャプチャされます。次に、その 2 つのキャプチャされた行から SELECT する必要がremoved=false
ありmin(taskdate_time)
ます。したがって、そのグループ化に対して 4 行が返され、そのうちの 2 行が返されremoved=false
、もう1 行が返された場合、その 2 行removed=true
の最小値に対して副選択を行う必要があります。taskdate_time
removed=false