您如何最好地总结交错行之间同一列中一系列日期的差异?我有一个日期时间列,想计算行之间的差异。我想要秒的差异。这个问题不是关于如何获得 2 个时间戳之间的差异,而是更侧重于如何最有效地在同一个表的行之间进行计算。在我的情况下,每一行都有一个日期时间事件类型,它在逻辑上将两行链接在一起。
详细说明如何对开始和结束的事件类型进行分组。(Andriy M 的问题)开始和结束“应该”是连续的。如果开始没有后续结束,则应将其排除在总和之外。移动到下一个开始,看看它是否有结束。只有连续的开始 - 结束对应该添加到总秒数的总和中。
在 postgresql 9.x 中工作...
表中的示例数据;
eventtype, eventdate
START, 2015-01-01 14:00
END, 2015-01-01 14:25
START, 2015-01-01 14:30
END, 2015-01-01 14:43
START, 2015-01-01 14:45
END, 2015-01-01 14:49
START, 2015-01-01 14:52
END, 2015-01-01 14:55
Run Code Online (Sandbox Code Playgroud)
请注意,所有开始日期和结束日期都是连续的。
这是我的第一次尝试。似乎正在工作。
SELECT
-- starts.*
SUM(EXTRACT(EPOCH FROM (eventdate_next - eventdate))) AS duration_seconds
FROM
(
WITH x AS (
SELECT *, dense_rank() OVER (ORDER BY eventdate) AS rnk
FROM table
AND eventdate > '2015-01-01 00:00:00.00'
AND eventdate < '2016-01-01 23:59:59.59'
)
SELECT …
Run Code Online (Sandbox Code Playgroud) 有没有一种方法可以通过单击列(类似于 Excel)来获取查询结果集中列的总和,这样我就不必将该列复制并粘贴到 Excel 中以查看总数列中所有值的总和?
我正在运行 SQL Server 2008。
我有这个代码,它总结了某个项目的数量 ( itemid
) 及其产品日期代码 ( proddte
)。
select sum(qty), itemid, proddte
from testtable where ....
group by itemid, proddte
Run Code Online (Sandbox Code Playgroud)
我想要做的是让所有总的qty
不管itemid/proddte
。我试过了:
select sum(qty), itemid, proddte, sum(qty) over() as grandtotal
from testtable
where ....
group by itemid, proddte
Run Code Online (Sandbox Code Playgroud)
但它说我也应该qty
在group by
条款中。如果我这样做,结果将不等于我的预期结果。
它并不绝对需要表示为一个单独的列,每一行都具有相同的值。只要我可以显示总体总数,任何表示都可以接受。
我正在尝试查询所有用户以查找上个月的订单价格。我在 PostgreSQL 上做这个。这是一个玩具数据库来显示我的问题:我有一张people
桌子和一张orders
桌子。我试图找到上个月所有人的订单总和。
这是我的数据:
select * from people;
id | name
----+--------------
1 | bobby lee
2 | greg grouper
3 | Hilldawg Ca
(3 rows)
select * from orders;
id | person_id | date | price
----+-----------+------------+-------
1 | 3 | 2014-08-20 | 3.50
2 | 3 | 2014-09-20 | 6.00
3 | 3 | 2014-09-10 | 7.00
4 | 2 | 2014-09-10 | 7.00
5 | 2 | 2014-08-10 | 2.50
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试编写的查询:
SELECT p.id, …
Run Code Online (Sandbox Code Playgroud) 我GROUP BY
在 MySQL中遇到困难。
我的数据库设置:
client_visit
- id
- member_id
- status_type_id (type_of_visit table)
- visit_starts_at
- visit_ends_at
member
- id
schedule_event
- id
- member_id
- starts_at
- ends_at
type_of_visit
- id
- type (TYPE_BOOKED, TYPE_PRESENT etc)
Run Code Online (Sandbox Code Playgroud)
就这个问题而言:a在给定时间member
教一门课或领导一项活动 (a schedule_event
)。Aclient
报名参加此课程或活动。
例如:
客户 A、B 和 C 预订访问,而那些访问client_visit
由schedule_event_id
和组成的表member_id
,因此我们知道哪个班级和哪个成员正在教授/或进行活动。
现在,我们想知道给定成员花费在客户注册的教学/领导活动上的总时间(基于client_visit
type_of_visit
相当于“预订”或“出席”的列)。我们将把成员 ID 82 作为我们的测试用例。
会员 ID 82 在两个不同的班级有 4 个客户,所以如果每个班级花费 2 小时 15 分钟(8100 秒),那么总时间应该是 16200 秒。
首先是我的查询: …
我有以下查询,我希望老化配置文件显示为新列我的老化配置文件为 0-30、31-60、61-90、91-120、121-180、181-365、365+
我基本上希望结果出现在网络到期时出现在适当的老化支架中。
BU 0-30 31-60 61-90 91-120 121-180 181-365 365+
--------------------------------------------------------------
A
B
C
Run Code Online (Sandbox Code Playgroud)
询问:
select
BU,
Ageing,
sum(NetDue) as Netdue
from [dbo].[vw_FACT_CONSOL_CREDITORS]
where date = @date
Group by BU, Ageing
Order by BU ;
Run Code Online (Sandbox Code Playgroud)
我是 SQL 的新手,只是想学习所以很抱歉,因为这是基本的东西谢谢
我一直在网上寻找答案,但真的不知道如何正确地制定我想要实现的目标以及是否可能,如果问题听起来很愚蠢,请抱歉。我正在使用 Postgresql。
我每天都有价格数据。
CREATE TEMP TABLE Price (id,Day, Price) AS
VALUES
(1, 1, 40),
(2, 1, 20),
(3, 1, 50),
(4, 1, 10),
(5, 1, 20),
(6, 1, 60),
(7, 2, 10),
(8, 2, 40),
(9, 2, 10),
(10,2, 20),
(11,2, 10);
Run Code Online (Sandbox Code Playgroud)
我想根据日期和价格总和为价格数据分配数字(1、2、3...)。每当总和 > 60 时,总和计算再次开始 + 每次到达新的一天时,总和计算再次开始。例如:
第 1 行 [第 1 天,价格 40] = 1。然后对于第 2 行 [第 1 天,价格 20],价格总和为 20 + 40 < 61,因此第 2 行也被分配给 1。然后对于第 3 行 [第 1 天, price 50] 价格总和是 20 …
我需要总结由多个时间范围产生的时间。例如 - 我们有一些办公室的进入/退出范围:
查询必须:
这种情况下的预期结果是 8:00(8:00 到 12:00 + 14:00 到 18:00)
示例表结构:
DAY | TIME_ENTER | TIME_EXIT
2016-01-01 | 08:00 | 10:00
2016-01-01 | 08:00 | 12:00
2016-01-01 | 14:00 | 18:00
Run Code Online (Sandbox Code Playgroud)
预期结果:
DAY | TOTAL
2016-01-01 | 08:00
Run Code Online (Sandbox Code Playgroud)
表结构:
CREATE TABLE Registry
(`Date` DATE,
`Enter` TIME,
`Exit` TIME);
Run Code Online (Sandbox Code Playgroud)
示例插入
INSERT INTO Registry
VALUES
('2016-01-01', '08:00', '09:00'),
('2016-01-01', '08:00', '12:00'),
('2016-01-01', '14:00', '18:00')
Run Code Online (Sandbox Code Playgroud) 我在制定(相对)简单的 SQL 查询(使用 SQL Server 2012)时遇到问题。我们有一个数据库,可以为某些用户计算一些东西。因此,我们有一个非常简单的数据库结构,由两个表组成。
表users
:
PK_User, uniqueidentifier
ID, bigint
Username, nvarchar(128)
CreationTimestamp, datetime
Run Code Online (Sandbox Code Playgroud)
表data
:
PK_Data, uniqueidentifier
FK_User, uniqueidentifier
FK_Reporter, uniqueidentifier
CreationTimestamp, datetime
Run Code Online (Sandbox Code Playgroud)
我目前正在使用以下 SQL 语句:
SELECT u.Username, COUNT(d.FK_User) AS 'Count', CAST(FLOOR(CAST(d.CreationTimestamp AS float)) AS datetime) AS 'Date'
FROM data d INNER JOIN users u ON u.PK_User = d.FK_User
GROUP BY CAST(FLOOR(CAST(d.CreationTimestamp AS float)) AS datetime), u.Username
ORDER BY CAST(FLOOR(CAST(d.CreationTimestamp AS float)) AS datetime)
Run Code Online (Sandbox Code Playgroud)
它提供了这样的东西:
User1 5 %Date1%
User2 3 %Date1%
User1 7 %Date2%
User2 …
Run Code Online (Sandbox Code Playgroud) 我有两个表 - 一个标题为“计划约束”的表,其中包含“sot_allowed”时间间隔,另一个标题为“计划”,其中包含“sot_contribution”时间间隔。
以下是两个表的架构(为便于阅读而进行了编辑):
Table "public.planning_constraints"
Column | Type | Modifiers
-------------+--------------------------+-------------------------------
start_time | timestamp with time zone |
end_time | timestamp with time zone |
sot_allowed | interval |
Table "public.planning"
Column | Type | Modifiers
------------------+--------------------------+----------------------------
start_time | timestamp with time zone |
end_time | timestamp with time zone |
sot_contribution | interval |
Run Code Online (Sandbox Code Playgroud)
我可以分别查询它们并生成我想要的总数。“planning_constraints”表的查询是:
SELECT
date_trunc('day', start_time - INTERVAL '18 hours')::date AS planning_day,
sum(sot_allowed) AS minutes_allowed
FROM planning_constraints
WHERE start_time>='2016-11-26 18:00:00+00' AND start_time<'2016-12-03 18:00:00+00' AND comment like …
Run Code Online (Sandbox Code Playgroud)