MySQL выбирает записи с суммами - PullRequest
0 голосов
/ 13 января 2009

Я использую MySQL и PHP. У меня есть таблица, которая содержит столбцы идентификатор и количество. Я хотел бы получить идентификатор строки, которая является последней суммой количества, когда она достигает числа 40 в сумме. Чтобы быть более конкретным. У меня есть 3 строки в базе данных. Один с количеством 10, один с количеством 30 и один с количеством 20. Поэтому, если я суммирую количества, чтобы получить результат 40, я бы суммировал первые два значения ведьмы: 10 + 30 = 40. Таким образом, последний идентификатор, который используется для суммирования числа 40 и 2. Я просто хочу знать идентификатор последней строки, которая используется для завершения суммы 40.

Я бы дал дополнительную информацию, если бы меня спросили. СПАСИБО !!


Позвольте мне сказать это так: У меня действительно есть 6 продуктов в моей руке. Первый пришел в моё владение 10-го числа, следующие 3 пришли 11-го числа, а последние 2 - 12-го.

Теперь я хочу продать 3 товара со своего склада. И хочу продать их в том порядке, в котором они пришли. Так что для покупателя, который хочет 3 продукта, я бы продал ему продукт, который пришел на 10, и 2 продукта из тех, что пришли на 11.

Для следующего покупателя, которому нужны 2 товара, я бы продал ему один товар с даты 11, оставшийся от последнего заказа из 3 товаров, и еще один из тех, что были на 12.

Вопрос в том, как узнать, по какой цене продавался каждый продукт? Я подумал, что если я смогу узнать, какие строки суммируют каждое запрошенное количество, я буду знать, где начинать сумму каждый раз, когда я хочу доставить заказ. Итак, сначала я бы посмотрел, какие строки суммируют 3 продукта, и сохранил идентификатор записи. Для следующего заказа я бы начал подсчет с этого идентификатора и суммировал, пока он не суммирует второй заказ из 2 продуктов и так далее. Я думал, что таким образом я могу отслеживать входящие цены, которые были у каждого продукта. Поэтому я не буду продавать товары с даты 12 по цене, составленной с использованием первых цен.

Надеюсь, вы понимаете. Мне просто нужно знать, по какой цене был какой-либо из моих продуктов, чтобы я знал, что у первых продуктов будет одна цена, но по мере повышения цен на продукты я тоже должен повышать свои цены ... Так что последние продукты, которые пришли, должны быть проданы более высокая цена. Я смогу достичь этого только, если буду следить за этим ...

Большое спасибо.


Никто? Или еще проще: MySQL должен выбрать необходимые строки для SUM (quantity), например, чтобы он был выше или равен 40. А затем, чтобы получить идентификатор последней строки, которая участвовала в процессе суммирования.

Ответы [ 3 ]

1 голос
/ 13 января 2009

Иметь третий столбец с промежуточным итогом. Затем вы можете просто вернуть последнюю строку, в которой промежуточный итог <= целевое значение. </p>

Итак, ваш стол должен выглядеть так:

ID    Quantity    RunningTotal
1           10              10
2           30              40
3           20              60

ПРИМЕЧАНИЕ. Если вы удалите строку в таблице, не забудьте обновить все последующие строки RunningTotal -= DeletedRow.Quantity!

0 голосов
/ 13 января 2009

Я не очень хорошо понимаю ваш вопрос. Можете ли вы попробовать переписать его более правильно? Насколько я понимаю, вот структура вашей базы данных:

ProductID    ArrivalDate
   1          10
   2          11
   3          11
   4          11
   5          12
   6          12

Теперь вы спрашиваете: «Откуда мне знать , по какой цене был каждый проданный мной товар»? Что сорта меня смущает, так как каждое значение в базе данных не имеет ценового атрибута. Разве ваша база данных не должна выглядеть так:

ProductID    ArrivalDate    Price
   1          10              100
   2          11              200
   3          11              300
   4          11              300
   5          12              400
   6          12              400

Лично я думаю, что ваша идея узнать цену продажи ошибочна. Имеет смысл добавить еще несколько полей в вашу базу данных:

ProductID    ArrivalDate    Price     InStock   DateSold
   1          10              100       Yes        17
   2          11              200       Yes        17
   3          11              300       Yes        18
   4          11              300       Yes        18
   5          12              400       no        
   6          12              400       no        

Изменяя свою базу данных, вы можете легко отслеживать, когда товар прибывает, дату продажи, его цену, возможно, количество (я не могу сказать, является ли это фактическим полем или нет).

Кроме того, вы можете упростить и упростить свою жизнь, разделив запросы SQL или даже добавив некоторый код, чтобы выполнить часть работы за вас.

0 голосов
/ 13 января 2009

Использование идентификаторов таблицы, вероятно, является плохой идеей для этого, но если это действительно так, вы можете попробовать что-то вроде этого (не проверено):

SELECT yourTableA.id
  FROM yourTable AS yourTableA
  JOIN yourTable AS yourTableB
 WHERE ( yourTableA.value + yourTableB.value ) = 40
   AND yourTableA.id != yourTableB.id
 ORDER BY yourTableA.id

Этот тип решения будет работать только в том случае, если вы ожидаете, что вам понадобятся только две строки, чтобы равняться вашей целевой сумме. Поскольку, скорее всего, это не так, лучше всего попытаться получить все строки и сделать это программно на возвращаемых данных.

Решение «Итоговые суммы», опубликованное lc, также является хорошим вариантом, хотя я обычно стараюсь избегать хранения вычисленных данных, если в этом нет необходимости.


На основании обновленной информации из этого запроса у меня есть альтернативный ответ.

Звучит не так, как будто ты заботишься об инвентаре. Вы больше заботитесь о том, когда поступят продукты.

SELECT *
  FROM product
 ORDER BY product.receivedData

Обрабатывайте каждую запись по мере ее поступления, сохраняйте цену этой записи и продолжайте столько времени, сколько вам нужно, пока не достигнете нужного вам количества предметов. Вы должны получить список предметов, количество инвентаря на этом уровне и цену на этом уровне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...