SELECT commandid
FROM results
WHERE NOT EXISTS (
SELECT *
FROM generate_series(0,119999)
WHERE generate_series = results.commandid
);
Run Code Online (Sandbox Code Playgroud)
我有一个results类型的列,int但各种测试失败,并没有添加到表中.我想创建一个返回commandid未找到的列表的查询results.我认为上面的查询会做我想要的.但是,如果我使用超出预期可能范围的范围commandid(如负数),它甚至不起作用.
我有一个表,可以在一段时间内存储网络上的带宽使用情况.一列将包含日期时间(主键),另一列将记录带宽.每分钟记录一次数据.我们将在那个时刻记录其他数据.
如果用户以15分钟的间隔(在给定的开始和结束日期的24小时内)请求数据,是否可以使用单个查询来获取我需要的数据,或者我是否必须编写存储过程/光标来执行此操作?然后,用户可以请求5分钟间隔数据等.
我很可能会使用Postgres但是还有其他NOSQL选项会更好吗?
有任何想法吗?
我是在MacOSX上首次使用Postgres 9.3创建数据库.
假设我有桌子A和B.Table A从空虚和Table B充满开始.我想的条目的数量在列all_names在表B为等于number每个names表A等表B的下方.因此,names应包含每个唯一的入口all_names和number计数.我还不习惯语法,所以我真的不知道如何去做.该birthday列是多余的.
一个
names | number
-------+------------
Carl | 3
Bill | 4
Jen | 2
Run Code Online (Sandbox Code Playgroud)
乙
all_names | birthday
-------+------------
Carl | 17/03/1980
Carl | 22/08/1994
Carl | 04/09/1951
Bill | 02/12/2003
Bill | 11/03/1975
Bill | 04/06/1986
Bill | 08/07/2005
Jen | 05/03/2009
Jen | 01/04/1945
Run Code Online (Sandbox Code Playgroud)
更新:这是正确的方法吗? …
我正在尝试使用PostgreSQL 9.2.4编写一个复杂的查询,但我无法正常工作.我有一个包含时间范围的表,以及其他几个列.当我在此表中存储数据时,如果所有列都相同且时间范围重叠或相邻,我将它们组合成一行.
但是当我检索它们时,我想在天边界处分割范围 - 例如:
2013-01-01 00:00:00 to 2013-01-02 23:59:59
Run Code Online (Sandbox Code Playgroud)
将被选为两行:
2013-01-01 00:00:00 to 2013-01-01 23:59:59
2013-01-02 00:00:00 to 2013-01-02 23:59:59
Run Code Online (Sandbox Code Playgroud)
对于两个检索到的条目,其他列中的值相同.
我已经看到这个问题似乎或多或少地解决了我想要的问题,但它适用于PostgreSQL的"非常旧"版本,所以我不确定它是否仍然适用.
我也看到了这个问题,它完全符合我的要求,但据我所知,该CONNECT BY语句是SQL标准的Oracle扩展,所以我不能使用它.
我相信我可以使用PostgreSQL来实现这一点generate_series,但我希望有一个简单的例子可以证明它是如何用来做到这一点的.
这是我目前正在处理的查询,目前无效(因为我无法FROM在连接的子查询中引用该表),但我相信这或多或少是正确的轨道.
更新:我刚刚发现一个有趣的事实,感谢这个问题,如果你SELECT在查询的一部分中使用set-returning函数,PostgreSQL将"自动"在集合和行上进行交叉连接.我想我已接近完成这项工作.
我正在创建一个订阅管理系统,需要生成未来 2 年即将到来的计费日期列表。我已经能够使用 generate_series 来获取适当的日期:
SELECT i::DATE
FROM generate_series('2015-08-01', '2017-08-01', '1 month'::INTERVAL) i
Run Code Online (Sandbox Code Playgroud)
我需要采取的最后一步是从计算中排除特定的日期范围。这些排除的日期范围可以是任何时间范围。此外,它们不应计入 generate_series 的时间范围内。
例如,假设我们有一个从“2015-08-27”到“2015-09-03”的日期范围排除。生成的 generate_series 应该从计算中排除那一周的日期,并且基本上将所有未来月份的计费日期推到未来一周:
2015-08-01
2015-09-10
2015-10-10
2015-11-10
2015-12-10
Run Code Online (Sandbox Code Playgroud) 我有下表:
CREATE TABLE f_contact (
agent character varying,
datetimeconnect timestamp without time zone,
datetimedisconnect timestamp without time zone,
duration integer
);
Run Code Online (Sandbox Code Playgroud)
duration是断开时间和连接时间之间的时间(以秒为单位)。
我可能有这样的数据:
agent datetimeconnect datetimedisconnect duration
20024 2019-03-18 12:01:00.0 2019-03-18 13:01:30.0 3630
20011 2019-03-11 08:47:40.0 2019-03-11 09:30:10.0 2550
Run Code Online (Sandbox Code Playgroud)
我想获取这些数据并将时间分布在 15 分钟的间隔内,这样我得到的结果如下:
20024 12:00 840
20024 12:15 900
20024 12:30 900
20024 12:45 900
20024 13:00 90
20011 08:45 740
20011 09:00 900
20011 09:15 900
20011 09:30 10
Run Code Online (Sandbox Code Playgroud)
如何实现这一目标?
我想要的是在桌子上进行统计,为此我正在使用 generate_series();
这是我正在做的事情:
SELECT x.month, amount
FROM (SELECT generate_series(
min(date_trunc('month', date)),
max(date_trunc('month', date)),
'1 month'
) AS month
FROM table
WHERE user_id = 55 AND ...
) x
LEFT JOIN (
SELECT SUM(amount) AS amount, date_trunc('month', date) AS month
FROM table
WHERE user_id = 55 AND ...
GROUP BY month
) q ON q.month = x.month
ORDER BY month
Run Code Online (Sandbox Code Playgroud)
这很好但但是当我想应用过滤器时,如果需要获取特定用户的数量,我必须将它们应用两次.有没有办法避免过滤两次,或以更有效的方式重写它,因为我不确定这是否是正确的方法?
我必须为特定时期内的每个月生成一个包含两列天间隔的列表。第一列必须是一个月的第一天,第二列必须是一个月的最后一天。
示例:
开始日期:2014-01-01
结束日期:2014-06-30
结果应该在两列中:
1. 2014-01-01 | 2014-01-31
2. 2014-02-01 | 2014-02-28
3. 2014-03-01 | 2014-03-31
4. 2014-04-01 | 2014-04-30
5. 2014-05-01 | 2014-05-31
6. 2014-06-01 | 2014-06-30
Run Code Online (Sandbox Code Playgroud)
我有两个函数可以从日期中获取第一天和最后一天。我试图结合两个系列,但没有运气。
select i::date
from generate_series(first_day('2014-01-01')
,first_day('2014-06-30'), '1 month'::interval) i
select i::date
from generate_series(last_day('2014-01-01')
,last_day('2014-06-30'), '1 month'::interval) i
Run Code Online (Sandbox Code Playgroud)
当它在系列中时,第二个函数不能正确显示最后一天。
我有一个表,reservations其中有两列(started_at, 和ended_at)。我想构建一个查询,将预订行扩展到他们各自的日子。因此,例如,如果预订持续了 5 天,我希望为它返回 5 行。类似的东西:
id | started_at | ended_at
----------------------------
1 | 2016-01-01 | 2016-01-05
2 | 2016-01-06 | 2016-01-10
Run Code Online (Sandbox Code Playgroud)
id | date
---------------
1 | 2016-01-01
1 | 2016-01-02
1 | 2016-01-03
1 | 2016-01-04
1 | 2016-01-05
2 | 2016-01-06
2 | 2016-01-07
2 | 2016-01-08
2 | 2016-01-09
2 | 2016-01-10
Run Code Online (Sandbox Code Playgroud)
我认为这generate_series可能在这里有用,但我不确定语法。任何帮助是极大的赞赏
我正在尝试运行此查询,直到不久前才能够运行。我不知道出了什么问题,我现在开始收到此错误?
Your database returned: ERROR: set-returning functions are not allowed in CASE Hint: You might be able to move the set-returning function into a LATERAL FROM item.
我的查询:
SELECT distinct
(CASE
WHEN {PERIOD} = 'Previous Quarter' AND pto.pto_start_date < (date_trunc('quarter', now() - INTERVAL '1 month') + INTERVAL '1 month')::date AND pto.pto_end_date >= (date_trunc('quarter', now() - INTERVAL '1 month') + INTERVAL '1 month')::date
THEN generate_series(pto.pto_start_date, pto.pto_end_date, '2 day'::interval)
WHEN {PERIOD} = 'Current Quarter' AND pto.pto_start_date < (date_trunc('quarter', now() - INTERVAL '1 …Run Code Online (Sandbox Code Playgroud) generate-series ×10
postgresql ×10
sql ×8
date-range ×2
chartio ×1
date ×1
nosql ×1
sql-function ×1