Расчет начальных и конечных запасов по дням mysql - PullRequest
0 голосов
/ 27 февраля 2020

, поэтому я пытаюсь создать систему инвентаризации с 4 таблицами

tblItem

idItem    name
------    -----
1         VGA
2         Mouse
3         Keyboard

tblInvoice

idInvoice    date          idUser
----------   -----         ------
1            2020-02-23    1
2            2020-02-24    2

tblInvoice_Item

idInvItem    pcs    idItem    idInvoice
---------    ----   -------   ----------
1            20     1         1
2            15     2         1
3            20     1         2
4            10     2         2

tblStock

idStock      pcs    date           idItem
---------    ----   -------        ----------
1            50     2020-02-23     1
2            15     2020-02-24     1
3            20     2020-02-23     2
4            10     2020-02-24     2
5            10     2020-02-25     1
6            30     2020-02-25     2

Ожидаемый результат:

date         idItem    name     openingStock     sales    closingStock
---------    -------   ----     ------           ------   -----------
2020-02-23   1         VGA      50               20       30
2020-02-23   2         Mouse    20               15       5
2020-02-23   3         Keyboard 0                0        0
2020-02-24   1         VGA      45               20       15
2020-02-24   2         Mouse    15               10       5
2020-02-24   3         Keyboard 0                0        0
2020-02-25   1         VGA      25               0        25
2020-02-25   2         Mouse    35               0        35
2020-02-25   3         Keyboard 0                0        0

или, если вы предпочитаете ...

-- phpMyAdmin SQL Dump
-- version 4.6.6deb5
-- https://www.phpmyadmin.net/
--
-- Host: localhost:3306
-- Generation Time: Feb 27, 2020 at 04:24 PM
-- Server version: 10.3.17-MariaDB-0+deb10u1
-- PHP Version: 7.3.11-1~deb10u1

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

--
-- Database: `test`
--

-- --------------------------------------------------------

--
-- Table structure for table `tblInvoice`
--

CREATE TABLE `tblInvoice` (
  `idInvoice` int(11) NOT NULL,
  `date` date NOT NULL,
  `idUser` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Dumping data for table `tblInvoice`
--

INSERT INTO `tblInvoice` (`idInvoice`, `date`, `idUser`) VALUES
(1, '2020-02-23', 1),
(2, '2020-02-24', 2);

-- --------------------------------------------------------

--
-- Table structure for table `tblInvoice_Item`
--

CREATE TABLE `tblInvoice_Item` (
  `idInvItem` int(11) NOT NULL,
  `pcs` int(11) NOT NULL,
  `idItem` int(11) NOT NULL,
  `idInvoice` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Dumping data for table `tblInvoice_Item`
--

INSERT INTO `tblInvoice_Item` (`idInvItem`, `pcs`, `idItem`, `idInvoice`) VALUES
(1, 20, 1, 1),
(2, 15, 2, 1),
(3, 20, 1, 2),
(4, 10, 2, 2);

-- --------------------------------------------------------

--
-- Table structure for table `tblItem`
--

CREATE TABLE `tblItem` (
  `idItem` int(11) NOT NULL,
  `name` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Dumping data for table `tblItem`
--

INSERT INTO `tblItem` (`idItem`, `name`) VALUES
(1, 'VGA'),
(2, 'Mouse'),
(3, 'Keyboard');

-- --------------------------------------------------------

--
-- Table structure for table `tblStock`
--

CREATE TABLE `tblStock` (
  `idStock` int(11) NOT NULL,
  `pcs` int(11) NOT NULL,
  `date` date NOT NULL,
  `idItem` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Dumping data for table `tblStock`
--

INSERT INTO `tblStock` (`idStock`, `pcs`, `date`, `idItem`) VALUES
(1, 50, '2020-02-23', 1),
(2, 25, '2020-02-24', 1),
(3, 30, '2020-02-25', 1),
(4, 100, '2020-02-23', 2);

--
-- Indexes for dumped tables
--

--
-- Indexes for table `tblInvoice`
--
ALTER TABLE `tblInvoice`
  ADD PRIMARY KEY (`idInvoice`);

--
-- Indexes for table `tblInvoice_Item`
--
ALTER TABLE `tblInvoice_Item`
  ADD PRIMARY KEY (`idInvItem`),
  ADD KEY `idItem` (`idItem`),
  ADD KEY `idInvoice` (`idInvoice`);

--
-- Indexes for table `tblItem`
--
ALTER TABLE `tblItem`
  ADD PRIMARY KEY (`idItem`);

--
-- Indexes for table `tblStock`
--
ALTER TABLE `tblStock`
  ADD PRIMARY KEY (`idStock`),
  ADD KEY `idItem` (`idItem`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `tblInvoice`
--
ALTER TABLE `tblInvoice`
  MODIFY `idInvoice` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
--
-- AUTO_INCREMENT for table `tblInvoice_Item`
--
ALTER TABLE `tblInvoice_Item`
  MODIFY `idInvItem` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- AUTO_INCREMENT for table `tblItem`
--
ALTER TABLE `tblItem`
  MODIFY `idItem` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
--
-- AUTO_INCREMENT for table `tblStock`
--
ALTER TABLE `tblStock`
  MODIFY `idStock` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- Constraints for dumped tables
--

--
-- Constraints for table `tblInvoice_Item`
--
ALTER TABLE `tblInvoice_Item`
  ADD CONSTRAINT `tblInvoice_Item_ibfk_1` FOREIGN KEY (`idItem`) REFERENCES `tblItem` (`idItem`),
  ADD CONSTRAINT `tblInvoice_Item_ibfk_2` FOREIGN KEY (`idInvoice`) REFERENCES `tblInvoice` (`idInvoice`);

--
-- Constraints for table `tblStock`
--
ALTER TABLE `tblStock`
  ADD CONSTRAINT `tblStock_ibfk_1` FOREIGN KEY (`idItem`) REFERENCES `tblItem` (`idItem`);

Я пытаюсь сделать что в http://sqlfiddle.com/#! 9 / b7e880a / 2 , но мой запрос суммирует все tblStock и tblInvoice_Item вместо ожидаемого результата выше. Я больше не имею понятия о желаемом результате выше. И я хотел, чтобы я мог получить результат из диапазона дат, например с 2020-02-23 до 2020-02-24.

Мой запрос:

select item.idItem, item.name, s.itemIn, ii.itemOut, (s.itemIn - ii.itemOut) as closing
FROM tblItem item

LEFT JOIN
    (SELECT sum(pcs) as itemIn, idItem
     FROM tblStock GROUP BY idItem) s ON item.idItem = s.idItem

LEFT JOIN 
    (SELECT sum(pcs) as itemOut, idItem
     FROM tblInvoice_Item GROUP BY idItem) ii ON item.idItem = ii.idItem

Если мой дизайн плохой, пожалуйста, руководство мне, как справиться с этим. Спасибо за поддержку.

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