我有一个表T1,其中包含以下列
T1
----------
ID | Name
----------
1 Sender1
2 Receiver1
3 Receiver2
4 Sender2
Run Code Online (Sandbox Code Playgroud)
表T2
T1
---------------------
SenderID | ReceiverID
---------------------
1 2
1 3
4 2
Run Code Online (Sandbox Code Playgroud)
我想以这样一种方式加入这两个表,我想让发送者和相应的接收者分组.我想要名称而不是ID.如何在一个SQL查询中完成此操作
例如:
发件人接收人
Sender1 receiver1
receiver2
Sender2 receiver1
Run Code Online (Sandbox Code Playgroud) 有没有办法获取Oracle内置aggeregate和其他功能等元数据AVG, STDDEV, SQRT,?我需要知道对象id和参数meta.
在SYS.ALL_OBJECTS视图中我找不到任何有用的东西.我还试图SYS.ALL_ARGUMENTS通过object_name 在视图中搜索.
是否有内置函数的视图或表格,数据类似于SYS.ALL_OBJECTS和SYS.ALL_ARGUMENTS?
我有一个包含以下列的表
table: route
columns: id, location, order_id
Run Code Online (Sandbox Code Playgroud)
并且它具有诸如的价值
id, location, order_id
1, London, 12
2, Amsterdam, 102
3, Berlin, 90
5, Paris, 19
Run Code Online (Sandbox Code Playgroud)
是否有可能在postgres中执行一个sql select语句,它将返回每一行以及带有下一个最高order_id的id?所以我想要......
id, location, order_id, next_id
1, London, 12, 5
2, Amsterdam, 102, NULL
3, Berlin, 90, 2
5, Paris, 19, 3
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个PostgreSQL表描述两点之间的线.它包含两列,A和B,表示点的id的整数(在另一个表中描述).
但是每一行都在表中重复,因为从A到B的行与从B到A的行相同.
我想删除重复项,但我找不到在两列上工作的聚合函数,重新组合AB和BA行然后删除一列.
谢谢 :)
当我查询表中包含大约一亿行的特定日期的最小ID时,我目前在数据库中遇到了一种奇怪的行为.查询非常简单:
SELECT MIN(Id) FROM Connection WITH(NOLOCK) WHERE DateConnection = '2012-06-26'
Run Code Online (Sandbox Code Playgroud)
这个查询结束了,至少我让它运行了几个小时.DateConnection列不是既不包含在其中的索引.所以我理解这个查询可以持续很长时间.但我尝试了以下几秒钟运行的查询:
SELECT Id FROM Connection WITH(NOLOCK) WHERE DateConnection = '2012-06-26'
Run Code Online (Sandbox Code Playgroud)
它返回300k行.
我的表定义如下:
CREATE TABLE [dbo].[Connection](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[DateConnection] [datetime] NOT NULL,
[TimeConnection] [time](7) NOT NULL,
[Hour] AS (datepart(hour,[TimeConnection])) PERSISTED NOT NULL,
CONSTRAINT [PK_Connection] PRIMARY KEY CLUSTERED
(
[Hour] ASC,
[Id] ASC
)
)
Run Code Online (Sandbox Code Playgroud)
它有以下索引:
CREATE UNIQUE NONCLUSTERED INDEX [IX_Connection_Id] ON [dbo].[Connection]
(
[Id] ASC
)ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
我发现使用这种奇怪行为的一个解决方案是使用以下代码.但对于这样一个简单的查询,我觉得相当沉重.
create table #TempId
(
[Id] bigint
)
go
insert into …Run Code Online (Sandbox Code Playgroud) sql-server performance aggregate-functions database-partitioning sql-server-2012
我的桌子:
Dataid date register_type read_value 77 2012-08-15 gen 20 77 2012-08-15 solar 48 77 2012-08-16 gen 39 77 2012-08-16 gen 22 80 2012-07-11 gen 11 80 2012-07-12 id 23 91 2012-02-01 id 4 91 2012-02-01 gen 59 91 2012-02-08 gen 18
我希望,每一天,read_values只为"gen" 做总和register_type.我基本上希望查询返回下表:
dataid date daily_value 77 2012-08-15 20.00 77 2012-08-16 61.00 80 2012-07-11 11.00 91 2012-02-01 59.00 91 2012-02-08 18.00
我尝试了以下查询,但它不起作用:
select
dataid,
date_trunc('day', timestamp_localtime) as truncated_day,
substring(cast(date_trunc('day', timestamp_localtime) as text)
from 1 for 10) …Run Code Online (Sandbox Code Playgroud) 我知道只有在Group By包含它们的情况下才允许使用普通列后跟聚合函数.
但是,为什么以下工作呢?
mysql> select payee,sum(amount) from checks;
+---------+-------------+
| payee | sum(amount) |
+---------+-------------+
| Ma Bell | 893.76 |
+---------+-------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud) 我正在使用psql DB来存储数据结构,如下所示:
datapoint(userId, rank, timestamp)
Run Code Online (Sandbox Code Playgroud)
其中timestamp是Unix Epoch毫秒时间戳.
在这个结构中,我每天存储每个用户的等级,所以它就像:
UserId Rank Timestamp
1 1 1435366459
1 2 1435366458
1 3 1435366457
2 8 1435366456
2 6 1435366455
2 7 1435366454
Run Code Online (Sandbox Code Playgroud)
所以,在上面的样本数据,用户id 1其改进它的秩每次测量,这意味着它有一个积极的趋势,而用户id 2在秩,这意味着它具有负的趋势正在下降.
我需要做的是根据最后N次测量检测所有具有正趋势的用户.
我有2张桌子
时间表:
pupil_id,staff_id,subject,lesson_id
Staff_info : staff_id,姓氏
时间表表包含1000行,因为每个学生的ID都列在他们所执行的每个时段下.
我想列出所有教师的名字,以及他们所做的课程数量(数).所以我必须用DISTINCT进行SELECT.
SELECT DISTINCT TIMETABLE.STAFF_ID,
COUNT(TIMETABLE.LESSON_ID),
STAFF.SURNAME
FROM STAFF
INNER JOIN TIMETABLE ON TIMETABLE.STAFF_ID = STAFF.STAFF_ID
GROUP BY TIMETABLE.STAFF_ID
Run Code Online (Sandbox Code Playgroud)
但是我得到错误:
列'STAFF.SURNAME'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.
Q/KDB中有一些函数让我们在滑动窗口(msum,mavg等)上聚合.但是这些函数会考虑先前行的数量.
我想要一个可以在滑动窗口上聚合但有时间而不是行数的函数.例如在最后5分钟.
这样的功能存在吗?如果没有,我该如何设计呢?我不想使用while循环,因为它会因为大量数据而导致我的程序运行速度过慢.
谢谢您的帮助
sql ×7
postgresql ×4
group-by ×3
aggregate ×1
count ×1
database ×1
datetime ×1
duplicates ×1
join ×1
kdb ×1
mysql ×1
oracle ×1
oracle10g ×1
oracle11g ×1
performance ×1
q-lang ×1
select ×1
sql-server ×1
t-sql ×1