Предполагая wagetable:Выбор самой высокой зарплаты
name lowhours highhours wage
Default 0.0 40.0 100
Default 40.0 50.0 150
Default 50.0 70.5 154
Default 70.5 100.0 200
Brian 0.0 40.0 200
Brian 40.0 50.0 250
Brian 50.0 60.0 275
Brian 60.0 70.0 300
Brian 70.0 80.0 325
Brian 80.0 9999.0 350
Chad 0.0 40.0 130
Chad 40.0 9999.0 170
В настоящее время я использую этот код (AutoIT сценарии:
func getCurrentWage($Employee, $Hour_number)
Dim $row
Local $Wage = 0
Local $Found = "found"
_SQLite_QuerySingleRow(-1, "SELECT wage FROM wagetable WHERE name LIKE " & _SQLite_Escape($Employee) & " AND " & _SQLite_Escape($Hour_number) & " BETWEEN lowhours AND highhours;", $row)
if @error then
_SQLite_QuerySingleRow(-1, "SELECT wage FROM wagetable WHERE name LIKE 'Default' AND " & _SQLite_Escape($Hour_number) & " BETWEEN lowhours AND highhours;", $row)
$Found = "not found"
endif
If ($row[0] == "") Then Msgbox(0,0,"Error getCurrentWage")
$Wage = $row[0]
Debug("Wage='" & $Wage & "' because " &$Employee&" was "& $Found& " -- and Hours Elapsed is " & $Hour_number, true)
return $Wage
EndFunc
Так эти 2 запросов совершенны, если Hour_number находится между ними низким часом Высокие часы. Мне нужен какой-то запрос, где он будет в основном делать что-то вроде:
SELECT wage from wagetable WHERE name LIKE $Employee AND max(highhours)
, а затем просто повторите его для «По умолчанию», сотрудник не найден.
Дополнительно: Можно ли попробовать «По умолчанию», если $ Employee не найден только с одним запросом?
Спасибо за подробный ответ. Я стану приоритетом, потому что этот процесс кажется самым простым. – ParoX
Несомненно, нет необходимости в новой колонке. 'ORDER BY CASE КОГДА name = 'default' THEN 1 ELSE 0 END DESC, highhours desc' сделает то же самое? –
@Martin Очень приятно. Я думаю, что было бы проще установить 1 или 0 в начале, когда таблица инициализируется, а не запускать if else в каждом запросе. Я уверен, что разница в производительности небольшая, но я буду запускать этот запрос 3-4 раза за 1 секунду. – ParoX