SQL :获取数据以及从单个 table 一个月的计数
SQL : Getting data as well as count from a single table for a month
我正在处理一个 SQL 查询,我有一个相当大的数据集。我有下面提到的 table 数据。
现有table:
+---------+----------+----------------------+
| id(!PK) | name | Date |
+---------+----------+----------------------+
| 1 | abc | 21.03.2015 |
| 1 | def | 22.04.2015 |
| 1 | ajk | 22.03.2015 |
| 3 | ghi | 23.03.2015 |
+-------------------------------------------+
我正在寻找的是插入查询到一个空的 table。条件是这样的:
Insert in an empty table where id is common, count of names common to an id for march.
以上 table 的输出类似于
+---------+----------+------------------------+
| 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;
不幸的是,上面的基本查询不适合这个复杂的要求。
有什么建议或想法吗?谢谢你。
更新查询
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;
如果我没理解错的话,你只需要一个日期条件:
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;
注意:table 名称后的列表包含要插入的列。使用insert . . . select
时没有values
关键字。
insert into empty_table
select id, count(*) as mycnt, min(date) as mydate
from existing_table
group by id, year_month(date);
请使用你的RDBMS提供的函数获取日期部分只包含年份和月份,因为你没有提供RDBMS版本并且它们之间的日期处理功能差异很大。
您似乎想要每个 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;
我正在处理一个 SQL 查询,我有一个相当大的数据集。我有下面提到的 table 数据。
现有table:
+---------+----------+----------------------+
| id(!PK) | name | Date |
+---------+----------+----------------------+
| 1 | abc | 21.03.2015 |
| 1 | def | 22.04.2015 |
| 1 | ajk | 22.03.2015 |
| 3 | ghi | 23.03.2015 |
+-------------------------------------------+
我正在寻找的是插入查询到一个空的 table。条件是这样的:
Insert in an empty table where id is common, count of names common to an id for march.
以上 table 的输出类似于
+---------+----------+------------------------+
| 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;
不幸的是,上面的基本查询不适合这个复杂的要求。
有什么建议或想法吗?谢谢你。
更新查询
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;
如果我没理解错的话,你只需要一个日期条件:
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;
注意:table 名称后的列表包含要插入的列。使用insert . . . select
时没有values
关键字。
insert into empty_table
select id, count(*) as mycnt, min(date) as mydate
from existing_table
group by id, year_month(date);
请使用你的RDBMS提供的函数获取日期部分只包含年份和月份,因为你没有提供RDBMS版本并且它们之间的日期处理功能差异很大。
您似乎想要每个 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;