당신은 행을 얻기 위해 변수를 사용할 수 있습니다별명 으로,
| 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이 아니므로 해당 값으로 수량을 업데이트하십시오.
테이블은 ID 또는 당신은 그래서 당신은 기록이 처음으로 알고에 의해 주문하는 데 사용할 수있는 일이 있는가, 둘째, ... – trincot
은 물론, 'acquisto의 수량'이있다 첫 번째 열의 이름이며 'Prezzo in acquisto'는 두 번째 열의 이름입니다. 하지만 나는 식탁에서 가장 높은 가격을 책정하는 방식으로 내림차순으로 'Prequo in acquisto'를 주문해야합니다. – pirusti