簡體   English   中英

我需要基於同一張表中不同條件的兩個不同列值

[英]I need two different column values based on different condition from same table

標題

我想每天獲取每個“儲罐ID”的第一條記錄的總和,以及每天明智的“收據”的總和,整個數據將在特定月份受到限制

SELECT
  DATE(t.DATE) AS 'Date',
  SUM(t.in_stock) AS 'Opening Stock',
  SUM(receipt) AS 'Receipt',
  SUM(in_stock + receipt)AS 'Total Stock' 
FROM diesel_tank_details t 
WHERE NOT EXISTS (
    SELECT
      1 
    FROM diesel_tank_details t2 
    WHERE
      DATE(t2.DATE) = DATE(t.DATE) 
      AND t2.tank_id = t.tank_id 
      AND t2.dt_id < t.dt_id
  )
  AND YEAR(DATE) = 2019 
  AND MONTH(DATE) = 7 
GROUP BY DATE(DATE)
Tank_ID    In_Stock  Receipt  Date
1          1000      1000     2019-07-10 00:28:33
2          2000      2000     2019-07-10 00:28:40
3          3000      3000     2019-07-10 00:28:47
1          300       0        2019-07-10 00:32:40
1          250       0        2019-07-15 15:15:06
3          2500      0        2019-07-15 15:15:37
2          1800      0        2019-07-15 15:35:49
3          2200      0        2019-07-15 16:13:17
1          500       250      2019-07-15 16:13:51
2          2000      200      2019-07-15 16:13:57
3          3000      800      2019-07-15 16:14:03

我需要上表的此輸出

Date        Opening Stock     Receipt    Total Stock
2019-07-10  6000              6000       12000
2019-07-15  4550              1250       4550

查詢

SELECT DATE(t.Date) as 'Date',
       SUM(t.In_Stock) as 'Opening Stock',
       SUM(t.Receipt) as 'Receipt',
       SUM(t.In_Stock + t.Receipt) as 'Total Stock'

FROM   diesel_tank_details t

WHERE  AND YEAR(t.Date) = 2019
       AND MONTH(t.Date) = 7

GROUP BY DATE(t.Date)

只需包括其他過濾器即可。 我不知道DT_ID做什么,所以我只是將其刪除。 但基本上您只是想按天分組。

由於需要不同的庫存和收貨條件,因此必須為每種情況匯總不同的行:

select s.day, s.`Opening Stock`, r.Receipt,
  (s.`Opening Stock` + s.Receipt) `Total Stock`
from (
  select g.day, sum(t.in_stock) `Opening Stock`, sum(t.receipt) receipt
  from diesel_tank_details t inner join (
    select date(date) day, tank_id, min(date) mindate
    from diesel_tank_details
    where in_stock <> 0
    group by date(date), tank_id
  ) g on g.tank_id = t.tank_id and g.mindate = t.date   
  group by g.day
) s inner join (
  select g.day, sum(t.receipt) Receipt
  from diesel_tank_details t inner join (
    select date(date) day, tank_id, min(date) mindate
    from diesel_tank_details
    where receipt <> 0
    group by date(date), tank_id
  ) g on g.tank_id = t.tank_id and g.mindate = t.date   
  group by g.day  
) r on r.day = s.day

參見演示
結果:

| day        | Opening Stock | Receipt | Total Stock |
| ---------- | ------------- | ------- | ----------- |
| 2019-07-10 | 6000          | 6000    | 12000       |
| 2019-07-15 | 4550          | 1250    | 4550        |

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM