假设赌桌:

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

我当前正在使用此代码(自动脚本:
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

因此,如果小时数介于低小时或高小时之间,则这两个查询是完美的。
我需要一些查询,它基本上会做如下事情:
SELECT wage from wagetable WHERE name LIKE $Employee AND max(highhours)

再重复一遍“默认”就是找不到员工。
额外:如果$Employee不在1个查询中找到,是否可以尝试使用“默认值”?

最佳答案

如果$Employee仅使用1个查询找不到,是否可以尝试使用“默认值”?

  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

当然,这是相同的解决方案,但这是一种更好的方法,而不是依赖默认值名称中的特殊字符。

关于sql - 选择最高薪水,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3539673/

10-08 22:39