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