我有这样的查询,很好地生成两个给定日期之间的一系列日期:
select date '2004-03-07' + j - i as AllDate
from generate_series(0, extract(doy from date '2004-03-07')::int - 1) as i,
generate_series(0, extract(doy from date '2004-08-16')::int - 1) as j
Run Code Online (Sandbox Code Playgroud)
它在2004-03-07和之间生成162个日期2004-08-16,这就是我想要的.这段代码的问题是,它不会得到正确的答案时,这两个日期都不同年份,例如,当我尝试2007-02-01和2008-04-01.
有更好的解决方案吗?
我需要创建一个返回的PostgreSQL查询
重要的是,即使当天没有找到任何物体,每一天都会出现在结果中.(之前已经讨论过这个问题,但是在我的具体案例中我无法解决问题.)
首先,我发现了一个sql查询来生成一系列天,我可以加入:
SELECT to_char(date_trunc('day', (current_date - offs)), 'YYYY-MM-DD')
AS date
FROM generate_series(0, 365, 1)
AS offs
Run Code Online (Sandbox Code Playgroud)
结果是:
date
------------
2013-03-28
2013-03-27
2013-03-26
2013-03-25
...
2012-03-28
(366 rows)
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试将其加入名为"sharer_emailshare"的表中,该表具有"已创建"列:
Table 'public.sharer_emailshare'
column | type
-------------------
id | integer
created | timestamp with time zone
message | text
to | character varying(75)
Run Code Online (Sandbox Code Playgroud)
这是GROUP BY我到目前为止最好的查询:
SELECT d.date, count(se.id) FROM (
select to_char(date_trunc('day', (current_date - offs)), 'YYYY-MM-DD')
AS date
FROM generate_series(0, 365, 1)
AS offs …Run Code Online (Sandbox Code Playgroud) 我的应用程序有一个Events带有时间戳事件的表.
我需要在每个最近的N时间间隔内报告事件的数量.对于不同的报告,间隔可以是"每周"或"每天"或"每小时"或"每15分钟间隔".
例如,用户可以显示他们每周,每天,每小时或每季度收到的订单数量.
1)我的偏好是动态地执行单个SQL查询(我正在使用Postgres)按任意时间间隔进行分组.有没有办法做到这一点?
2)一种简单但丑陋的暴力方法是对按时间戳排序的开始/结束时间帧内的所有记录执行单个查询,然后使用方法按任意间隔手动构建计数.
3)另一种方法是在事件表中为每个区间添加单独的字段并静态存储一个the_week the_day,the_hour和the_quarter_hour字段,这样我就可以在创建记录时(一次)进行"点击",而不是每次报告该字段时.
这里有什么最好的做法,因为我可以根据需要修改模型和预先存储间隔数据(尽管只需要将表格宽度加倍);
sql postgresql ruby-on-rails aggregate-functions generate-series
我有2个表 - 课程包含课程的id和名称以及包含每门课程标签的tagCourse.
course tagcourse
------------ ----------------
PK id_course PK tag
name PK, FK id_course
Run Code Online (Sandbox Code Playgroud)
我想编写一个函数,通过给定的标签数组搜索课程,并按匹配标签的数量排序.但是我不知道如何以有效的方式正确地编写它.请帮我.
即.
CREATE OR REPLACE FUNCTION searchByTags(tags varchar[])
RETURNS SETOF.....
RETURN QUERY SELECT * FROM course c INNER JOIN tagcourse tc ON c.id_course = tc.id_course
WHERE ??? ORDER BY ???
END....
Run Code Online (Sandbox Code Playgroud) sql postgresql aggregate sql-order-by set-returning-functions
我有一个看起来像这样的 sqlalchemy 查询。
首先,我按时间戳对 Pomo 模型进行分组,然后按 Pomo 的创建日期分组。
db.session.query(Pomo.timestamp, sa.func.count(Pomo.id))\
.group_by(sa.func.date(Pomo.timestamp)).all()
Run Code Online (Sandbox Code Playgroud)
这将返回如下所示的数据
[(datetime.datetime(2018, 3, 2, 0, 0), 1),
(datetime.datetime(2018, 3, 7, 0, 0), 1),
(datetime.datetime(2018, 3, 8, 0, 0), 6)]
Run Code Online (Sandbox Code Playgroud)
如何填写日期以便输出类似于
[(datetime.datetime(2018, 3, 2, 0, 0), 1),
(datetime.datetime(2018, 3, 3, 0, 0), 0),
(datetime.datetime(2018, 3, 4, 0, 0), 0),
(datetime.datetime(2018, 3, 5, 0, 0), 0),
(datetime.datetime(2018, 3, 6, 0, 0), 0),
(datetime.datetime(2018, 3, 7, 0, 0), 1),
(datetime.datetime(2018, 3, 8, 0, 0), 6)]
Run Code Online (Sandbox Code Playgroud) postgresql ×4
sql ×4
aggregate ×1
date ×1
group-by ×1
join ×1
python ×1
sql-order-by ×1
sqlalchemy ×1
time-series ×1