2016-08-27 3 views
2

이 경우 입력이 5이고 처음 두 행을 선택하여 첫 번째 행을 삭제하려고합니다. . 나는이 쿼리를하려고 노력테이블의 첫 번째 행을 선택하십시오 (값의 합이 입력보다 작음).

enter image description here

10 대신 값 7을 가하고, 두 번째를 업데이트 할 수 있지만 그것은 충분하지 않습니다하기 :

SELECT SUM(`Qty in acquisto`) AS total,`Prezzo in acquisto` 
FROM `book` 
GROUP BY `Qty in acquisto` 
HAVING COUNT(*) >5 
+0

테이블은 ID 또는 당신은 그래서 당신은 기록이 처음으로 알고에 의해 주문하는 데 사용할 수있는 일이 있는가, 둘째, ... – trincot

+0

은 물론, 'acquisto의 수량'이있다 첫 번째 열의 이름이며 'Prezzo in acquisto'는 두 번째 열의 이름입니다. 하지만 나는 식탁에서 가장 높은 가격을 책정하는 방식으로 내림차순으로 'Prequo in acquisto'를 주문해야합니다. – pirusti

답변

1

당신은 행을 얻기 위해 변수를 사용할 수 있습니다별명 으로,

| Qty in acquisto | Prezzo in acquisto | taken | adjusted_acquisto | still_needed | 
|-----------------|--------------------|-------|-------------------|--------------| 
|    2 |    1000 |  2 |     0 |   3 | 
|    10 |    960 |  3 |     7 |   0 | 

가장 안쪽 쿼리에서 SQL fiddle

를 참조하십시오

SELECT * 
FROM (
    SELECT `Qty in acquisto`, 
      `Prezzo in acquisto`, 
      @take := least(`Qty in acquisto`, @needed) as taken, 
      `Qty in acquisto` - @take as adjusted_acquisto, 
      @needed := @needed - @take as still_needed 
    FROM  book, 
      (select @needed := 5) as init 
    ORDER BY `Prezzo in acquisto` DESC) base 
WHERE taken + still_needed > 0 

샘플 데이터의 출력은 다음과 같습니다 관심, 함께 정보를 사용하면 레코드를 업데이트 할 필요가 init, 필요한 책 수를 전달합니다 (예제에서는 5). ,

그 값이 0이면 해당 레코드를 삭제 :

그래서 열 adjusted_acquisto에 당신은 삭제 및 업데이트를 수행하는 데 필요한 값을 찾을 수 있습니다.

값이 0이 아니므로 해당 값으로 수량을 업데이트하십시오.

1

예 :

SELECT * FROM my_table; 
+------+--------+ 
| id | amount | 
+------+--------+ 
| 800 |  8 | 
| 900 |  3 | 
| 950 |  4 | 
| 960 |  10 | 
| 1000 |  2 | 
+------+--------+ 
SELECT n.id 
    , GREATEST([email protected],0) new_amount 
    , @x:=GREATEST(@x-amount,0) x 
    FROM my_table n 
    , (SELECT @x:=5) vars 
ORDER 
    BY id DESC; 
+------+--------+------------+------+ 
| id | amount | new_amount | x | 
+------+--------+------------+------+ 
| 1000 |  2 |   0 | 3 | 
| 960 |  10 |   7 | 0 | 
| 950 |  4 |   4 | 0 | 
| 900 |  3 |   3 | 0 | 
| 800 |  8 |   8 | 0 | 
+------+--------+------------+------+ 
관련 문제