使用(sub Select)从表格中选择最小值

时间:2019-10-10 04:51:18

标签: sql

我正在尝试从表格中选择特定的行。一切都很好,但最后选择的分钟无效。因此,在进行整个选择后,我需要最小支腿编号。

SELECT cashier.* , legs.* ,cashier.id as cashier, 
cashier.cashierNumber as cashierNum ,cashier.fullName as cashier
FROM myTable
INNER JOIN  legs ON main.main= legs.legMain 
INNER JOIN  cashier ON legs.cashier = cashier.id 
WHERE legs.RRZZFrom ='RR' 
AND legs.LegNumber = (SELECT Min(legs.LegNumber) FROM legs)

4 个答案:

答案 0 :(得分:1)

audit::inspec

答案 1 :(得分:0)

您可能想尝试使用cte。

with cte as (
  select min(LegNumber) as minLegNum from legs
)SELECT cashier.* , legs.* ,cashier.id as cashier, 
    cashier.cashierNumber as cashierNum ,cashier.fullName as cashier
    FROM myTable
    INNER JOIN  legs ON main.main= legs.legMain 
    INNER JOIN  cashier ON legs.cashier = cashier.id 
    INNER JOIN cte c on c.minLegNum = legs.LegNumber
    WHERE legs.RRZZFrom ='RR' 

答案 2 :(得分:0)

您是否仅从所选数据中查找MIN支路编号?在这种情况下,如下所示:

WITH Details
AS
(
    SELECT cashier.* , legs.* ,cashier.id as cashier, 
    cashier.cashierNumber as cashierNum ,cashier.fullName as cashier
    FROM myTable
    INNER JOIN  legs ON main.main= legs.legMain 
    INNER JOIN  cashier ON legs.cashier = cashier.id 
    WHERE legs.RRZZFrom ='RR' 
)
SELECT d.*
FROM Details AS d
WHERE d.LegNumber = (SELECT MIN(d2.LegNumber) FROM Details AS d2);

由于我不知道表的布局,因此不确定是否需要在此处为​​其他任何列作为别名。

答案 3 :(得分:0)

尝试一下:

WITH DataSource AS
(
    SELECT cashier.* 
          ,legs.* 
          ,cashier.id as cashier
          ,cashier.cashierNumber as cashierNum 
          ,cashier.fullName as cashier
          ,MIN(legs.LegNumber) OVER() AS [MinLegNUmber]
    FROM myTable
    INNER JOIN  legs 
        ON main.main= legs.legMain 
    INNER JOIN  cashier 
        ON legs.cashier = cashier.id 
    WHERE legs.RRZZFrom ='RR' 
)
SELECT *
FROM DataSource
WHERE LegNumber = [MinLegNUmber];

想法是使用OVER()子句计算选择每一行之后的最小值:

MIN(legs.LegNumber) OVER()

然后在外部查询中仅返回与此值匹配的行。

OVER子句是一种特别强大的语法,它允许对给定的一组值执行操作(排序,聚合)。 OVER()语法表示整个实体。