Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从日期范围中选择数据源_Sql_Postgresql - Fatal编程技术网

Sql 如何从日期范围中选择数据源

Sql 如何从日期范围中选择数据源,sql,postgresql,Sql,Postgresql,除了创建包含日期范围所有值的表之外,我如何从数据范围中选择数据源 我试图完成的是创建一个在同一周内从单独的表中创建的所有项目的运行总数,同时显示0个新项目的周数 示例表: items ----------------------------- created_on | name | type ----------------------------- 2012-01-01 | Cards | 1 2012-01-09 | Red Pen | 2 2012-01-31 | Pen

除了创建包含日期范围所有值的表之外,我如何从数据范围中选择数据源

我试图完成的是创建一个在同一周内从单独的表中创建的所有项目的运行总数,同时显示0个新项目的周数

示例表:

items
-----------------------------
created_on | name     | type 
-----------------------------
2012-01-01 | Cards    | 1
2012-01-09 | Red Pen  | 2
2012-01-31 | Pencil   | 2
2012-02-01 | Blue Pen | 2

types
--------------
name     | id 
--------------
Fun      | 1
Writing  | 2
样本输出:

----------------------------
year | week | fun | writing 
----------------------------
2012 | 1    | 1   | 0
2012 | 2    | 0   | 1
2012 | 3    | 0   | 0
2012 | 4    | 0   | 0
2012 | 5    | 0   | 2

您可以为周数生成数字系列

SELECT
  w.week
FROM
  (SELECT generate_series(1,52) as week) as w
范例

SELECT
  w.year,
  w.week,
  COUNT(i1) as fun,
  COUNT(i2) as writing
FROM (SELECT 2012 as year, generate_series(1,6) as week) as w
LEFT JOIN items i1 ON i1.type = 1 AND w.week = EXTRACT(WEEK FROM i1.created_on)
LEFT JOIN items i2 ON i2.type = 2 AND w.week = EXTRACT(WEEK FROM i2.created_on)
GROUP BY 
  w.year,
  w.week
ORDER BY
  w.year,
  w.week

非常接近erikxiv,但你让我走对了方向。我需要从多个表中获取信息,这是选择字段中的附加选择

select 
    date_year.num,
    date_week.num,
    (   select count(*) from items x
        and EXTRACT(YEAR FROM x.created_on) = date_year.num
        and EXTRACT(WEEK FROM x.created_on) = date_week.num
    ) as item_count
from
    (SELECT generate_series(2011, date_part('year', CURRENT_DATE)::INTEGER) as num) as date_year,
    (SELECT generate_series(1,52) as num) as date_week
where
    (
        date_year.num < EXTRACT (YEAR FROM CURRENT_DATE) 
        OR 
        (
            date_year.num = EXTRACT (YEAR FROM CURRENT_DATE) AND
            date_week.num <= EXTRACT (WEEK FROM CURRENT_DATE)
        )
    )

请注意,它对于测试针对多种类型的RDBMS的查询非常有用。不,您的连接限制太大了。你现在所拥有的将生成一个系列。不太重要的是,i.EXTRACT会提示语法错误,而COUNTa布尔表达式将无法执行您想要的操作。感谢SQLFIDLE提示,查询中有不少错误。它应该工作得更好,尽管PostgreSQL没有考虑2012-01-01成为第1周的一部分。