Выбор самой высокой зарплаты - PullRequest
2 голосов
/ 22 августа 2010

Предполагается, что таблица оплаты:

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)

, а затем просто повторить его для «По умолчанию», если сотрудник не найден.

Дополнительно: возможно ли попробовать 'Default', если $ Employee не найден только с одним запросом?

1 Ответ

1 голос
/ 22 августа 2010

Возможно ли попробовать 'Default', если $ Employee не найден только с одним запросом?

  SELECT name, wage, highhours
    FROM wagetable
   WHERE name like 'Brian' OR
         name like 'Default'
ORDER BY name,
         highhours desc

Этот запрос работает при запросе Brian, но длядля работы с любым именем Default должно храниться в вашей базе данных, начиная со специального символа _-+@, потому что цифры и буквы идут первыми в сортировке.

Другой способ - создать еще один столбец.к таблице, ради нашего аргумента, называется priority, которая должна иметь значение 0 для Default и 1 для любого другого пользователя.Тогда вы можете просто сделать:

  SELECT name, wage, highhours
    FROM wagetable
   WHERE name like 'Brian' OR
         name like 'Default'
ORDER BY priority desc,
         highhours desc

Конечно, это то же самое решение, но это лучший подход, чем полагаться на специальный символ в имени значений по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...