SQL:从一个表中获取数据和计数一个月

时间:2016-04-21 11:31:14

标签: sql database teradata nested-queries

我正在进行SQL查询,我有一个相当庞大的数据集。我有下面提到的表格数据。

现有表格:

  +---------+----------+----------------------+
    | id(!PK)      | name     |      Date       |
    +---------+----------+----------------------+
    | 1       | abc      |         21.03.2015   |
    | 1       | def      |          22.04.2015  |
    | 1       | ajk      |          22.03.2015  |
    | 3       | ghi      |          23.03.2015  |
    +-------------------------------------------+

我正在寻找的是对空表的插入查询。条件是这样的:

Insert in an empty table where id is common, count of names common to an id for march.

上表的输出就像

  +---------+----------+------------------------+
    | some_id      | count     |      Date      |
    +---------+----------+----------------------+
    | 1       | 2      |         21.03.2015     |
    | 3       | 1      |          23.03.2015    |
    +-------------------------------------------+

我只有:

insert into empty_table values (some_id,count,date) 
select id,count(*),date from existing_table where id=1;

不幸的是,上面的基本查询并不适合这种复杂的要求。

有任何建议或想法吗?谢谢。

Udpated query

insert into empty_table  
select id,count(*),min(date) 
from existing_table  where
          date >= '2015-03-01' and
          date < '2015-04-01'
group by id;

3 个答案:

答案 0 :(得分:2)

似乎你想要每个id的唯一名称数量:

insert into empty_table  
select id
   ,count(distinct name)
   ,min(date) 
from existing_table 
where date >= DATE '2015-03-01'
  and date < DATE '2015-04-01'
group by id;

答案 1 :(得分:0)

如果我理解正确,你只需要一个日期条件:

insert into empty_table(some_id, count, date) 
    select id, count(*), min(date)
    from existing_table
    where id = 1 and
          date >= date '2015-03-01' and
          date < date '2015-04-01'
    group by id;

注意:表名后面的列表包含要插入的列。使用values时没有insert . . . select个关键字。

答案 2 :(得分:0)

insert into empty_table  
select id, count(*) as mycnt, min(date) as mydate
from existing_table 
group by id, year_month(date);

请使用您的RDBMS提供的功能获取日期部分,只包含年份和月份,只要您没有提供RDBMS版本,日期处理功能就会有很大差异。