2
假設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)
然後只是重複它的'默認'是僱員找不到。
額外:如果只有1個查詢沒有找到$ Employee,是否可以嘗試'默認'?
感謝您的詳細解答。我會優先考慮,因爲這個過程似乎最簡單。 – ParoX 2010-08-22 02:19:13
當然不需要新的列。 '如果name ='default'則按ORDER BY CASEEN THEN 1 ELSE 0 END DESC,highhours desc'會做同樣的事情嗎? – 2010-08-22 02:27:33
@Martin非常好。我認爲在表初始化時,在開始時設置1或0會更容易,而不是在每個查詢上運行if else。我確信性能差異很小,但我會在1秒內運行這個查詢3-4次 – ParoX 2010-08-22 02:32:28