在几个条件下的独特价值

时间:2017-04-05 11:20:17

标签: mysql sql

我已经要求在几个条件下提取唯一数据,而现在我被困了。谁能建议如何解决这个问题?

表格如下所示:

Date      |ID | TicketNumber  | Category   | Subcategory|TCount1| TCount2|TCount3

01.04.2017| 1 | 11111         | OldMachine | DDD        | 1     |  2     | 3
01.04.2017| 1 | 13451         | OldMachine | DDD        | 1     |  2     | 3
01.04.2017| 1 | 14343         | OldMachine | DDD        | 1     |  2     | 3
01.04.2017| 2 | 22222         | New Machine| FFD        | 2     |  5     | 8
02.04.2017| 2 | 22222         | New Machine| FFD        | 9     |  7     | 9 

我应该得到:

For 01.04.2017 for ID=1

01.04.2017| 1 | 11111         | OldMachine | DDD        | 1     |  2     | 3
01.04.2017| 1 | 13451         | OldMachine | DDD        | 1     |  2     | 3
01.04.2017| 1 | 14343         | OldMachine | DDD        | 1     |  2     | 3
For 02.04.2017 for ID=2

02.04.2017| 2 | 22222         | New Machine| FFD        | 9     |  7     | 9 

我需要计算每个ID总计,但是:

  1. 如果一个TicketNumbers重复,我需要取最后一个并仅计算那个。
  2. 每个ID包含每个日期的所有TicketNumbers的总和。
  3. 类别和子类别可以在一天内更改某些ID。
  4. 有人有点想法吗?

    由于

    我试过了:

    select t1.date, t1.id, t1.ticketnumber
    from schema.table t1
    inner join 
    (select max(schema.table.date) as maxdate, schema.table.id,schema.table.ticketnumber,          
     from schema.table 
     GROUP BY schema.table.id,schema.table.ticketnumber) t2
     on t2.id = t1.id 
     and t2.maxdate = t1.date;
    

    但是这会返回所有的票证号码(不是唯一的)。

1 个答案:

答案 0 :(得分:1)

如果一个TicketNumbers重复,我需要采取最后一个并且只计算那个。

select TicketNumber, count(TicketNumber) as ticketcount
from your_table a
inner join (select max(id) as maxid from your_table) b where a.id = b.id) 
group by TicketNumber

每个ID包含每个日期的所有TicketNumbers的总和。

select outer.Date, outer.ID, inner.ticketcount, sum(inner.ticketcount)
from your_table outer
inner join ( select TicketNumber, count(TicketNumber) as ticketcount
             from your_table a
             inner join (select max(id) as maxid from your_table) b 
             where a.id = b.id) 
             group by TicketNumber ) inner
  on inner.TicketNumber = outer.TicketNumber
group by outer.Date, outer.ID, inner.ticketcount

类别和子类别可以在一天内更改某些ID。

select yt.Date
       , yt.ID, 
       , yt.TicketNumber
       , yt.Category
       , yt.SubCategory
       , t2.ticketcount as TCount1
       , t2.sumticket as TCount2
       , count(yt.ID) as TCount3
from your_table yt
inner join (select Date, ticketcount, sum(ticketcount) as sumticket
      from your_table outer
      inner join ( select TicketNumber, count(TicketNumber) as ticketcount
                   from your_table a
                   inner join (select max(id) as maxid from your_table) b 
                   on a.id = b.id 
                   group by TicketNumber ) inner
       on inner.TicketNumber = outer.TicketNumber
       group by Date, ticketcount) t2
  on yt.Date = t2.Date
  group by yt.Date
          , yt.ID, 
          , yt.TicketNumber
          , yt.Category
          , yt.SubCategory
          , t2.ticketcount
          , t2.sumticket

这假设您的TCount1表示您的案例编号1,您的案例编号为2的Tcount2和列表中的案例3的Tcount3。

相关问题