Это бд тех. обслуживания машин. Есть несколько таблиц cars(id_car,gov_num,brand), brands(id_brandsbrand_name), mileages(id_mileage,idcar,value), docs_to(idbrand1,interval). Мне нужно средствами sql вывести определённые gov_num и brand_name с учётом превышения двух последних value по idcar из mileages значению interval(есть интервалы для разных то1 и то2). Я реализовал такой алгоритм языком программирования, но в sql без возможности использования переменных и прочих удобных штук я бессилен. Если вы видите вариант реализации проще - предлагайте.
gov_num это типа госномер? "license plate number" это ваще-то пожалуйста дай пример данных. и как должен выглядеть результат. как-то не очень понятна вот эта фраза: "с учётом превышения двух последних value по idcar" в идеале, данные надо скопировать на db-fiddle.com чтобы там же получить ответ от нас.
Ну да gov(erment)_num это гос номер. На картинке в правой части результат под то1 и то2. На цифры не обращайте внимание. Могу предложить дамп бд. Совсем забыл. MySQL 8.0
@Ryaaaaa в sql есть переменные и прочие удобные штуки: для примера mssql Код (Text): DECLARE @shiftType int, @now datetime, @morning datetime, @night datetime, @taskdate datetime, @diff datetime; SET @now = GETDATE(); SET @morning = DATEADD( hour, 7, DATEDIFF( dd, 0, @now ) ); SET @night = DATEADD( hour, 19, DATEDIFF( dd, 0, @now ) ); SET @diff = DATEADD( SECOND, -300 , @now ); IF @now >= @morning AND @now <= @night SET @shiftType = 0; ELSE SET @shiftType = 1; IF @now >= @morning SET @taskdate = CAST( @now AS date ); ELSE SET @taskdate = DATEADD(DAY, -1, CAST( @now AS date )); WITH table_1 AS ( --запрос 1 ), table_2 AS ( --запрос 2 ), table_3 AS ( --запрос 3 ), table_4 AS ( --запрос 4 ), table_5 AS ( --запрос 5 ), table_6 AS ( --запрос 6 ) SELECT tb3.[Oid], tb3.[Name], tb3.[State], tb1.[IdleType], tb2.[CycleNorm], tb2.[Weight], (CASE WHEN tb4.[Warning] IS NULL THEN (1) ELSE ( tb4.[Warning] ) END) AS [Warning], (CASE WHEN tb5.[ProductionPlan] IS NULL THEN (0) ELSE ( tb5.[ProductionPlan] ) END) AS [ProductionPlan], (CASE WHEN tb6.[Rfid] IS NULL THEN (0) ELSE tb6.[Rfid] END) AS [Rfid] FROM table_3 AS tb3 LEFT JOIN table_1 AS tb1 ON tb1.[RepairObject] = tb3.[Oid] LEFT JOIN table_2 AS tb2 ON tb2.[RepairObject] = tb3.[Oid] LEFT JOIN table_4 AS tb4 ON tb4.[RepairObject] = tb3.[Oid] LEFT JOIN table_5 AS tb5 ON tb5.[RepairObject] = tb3.[Oid] LEFT JOIN table_6 AS tb6 ON tb6.[RepairObject] = tb3.[Oid] ORDER BY tb3.[Name] ASC
Ну не сказал бы. Я вот допустим не могу создать класс для хранения данных, не могу воспользоваться моими любимыми коллекциями, не могу использовать индексацию.