我正在进行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;
答案 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版本,日期处理功能就会有很大差异。