我有一个通用的"Dimension"和"DimensionMember"表.
CREATE TABLE [dbo].[Dimension]
(
[ID] [int] NOT NULL IDENTITY(1, 1),
[Label] [nvarchar] (255)
)
CREATE TABLE [dbo].[DimensionMember]
(
[ID] [int] NOT NULL IDENTITY(1, 1),
[Label] [nvarchar] (255) NOT NULL,
[DimensionID] [int] NOT NULL
)
GO
ALTER TABLE [dbo].[DimensionMember] ADD CONSTRAINT [FK_DimensionMember_DimensionID_Dimension_ID] FOREIGN KEY ([DimensionID]) REFERENCES [dbo].[Dimension] ([ID])
Run Code Online (Sandbox Code Playgroud)
这些表存储了大量维度和维度成员.
我想从可变数量的维度交叉连接维度成员.示例:来自"性别","就业类型","合同类型"维度的交叉连接维度成员应生成以下组合
'Male,Full time, Employee'
'Female,Full time, Employee'
'Male,Part time, Employee'
'Female,Part time, Employee'
'Male,Full time, Contractor'
'Female,Full time, Contractor'
'Male,Part time, Contractor'
'Female,Part time, Contractor'
Run Code Online (Sandbox Code Playgroud)
应通过连接维成员的标签来创建组合的标签(如上所示).
先感谢您
维度列表(例如"性别","就业类型","合同类型")是动态的(在运行时由另一个查询生成).
修正了一个小错误(Dimension1 …
我有以下代码:
main_cols <- c('num', 'let')
dt <- data.table(num = 1:5, let = letters[1:5])
dt
new_dt <- dt[CJ(num = num
, let = let
, unique = TRUE)
, on = main_cols
]
head(new_dt, 10)
Run Code Online (Sandbox Code Playgroud)
问题是:我想将列作为向量传递给交叉连接.如何main_cols在CJ功能内"解压缩" ?谢谢.
我正在尝试使用具有多个相当动态条件的数据表进行内部联接。我被语法绊倒了。首先,我创建两个对象,x并且x2要对其进行内部联接。
set.seed(1)
#generate data
x = data.table(CJ(t=1:10, d=1:3,p1s=seq(1,3,by=0.1),p1sLAST=seq(1,3,by=0.1)))
x[d==1,p1sLAST:=3]
x=x[p1s<=p1sLAST]
x2 = data.table(CJ(tprime=1:10, p1sLASTprm=seq(1,3,by=0.1)))
Run Code Online (Sandbox Code Playgroud)
与对象:
> x
t d p1s p1sLAST
1: 1 1 1.0 3.0
2: 1 1 1.0 3.0
3: 1 1 1.0 3.0
4: 1 1 1.0 3.0
5: 1 1 1.0 3.0
---
9026: 10 3 2.8 2.9
9027: 10 3 2.8 3.0
9028: 10 3 2.9 2.9
9029: 10 3 2.9 3.0
9030: 10 3 3.0 3.0
> x2
tprime p1sLASTprm …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过三个变量(组、id 和日期)交叉连接 data.table。下面的 R 代码完全实现了我想要做的事情,即每个组中的每个 id 都被扩展以包含所有想要的日期。但是有没有办法使用优秀的 data.table 包更有效地完成同样的事情?
library(data.table)
data <- data.table(
group = c(rep("A", 10), rep("B", 10)),
id = c(rep("frank", 5), rep("tony", 5), rep("arthur", 5), rep("edward", 5)),
date = seq(as.IDate("2020-01-01"), as.IDate("2020-01-20"), by = "day")
)
data
dates_wanted <- seq(as.IDate("2020-01-01"), as.IDate("2020-01-31"), by = "day")
names_A <- data[group == "A"][["id"]]
names_B <- data[group == "B"][["id"]]
names_A <- CJ(group = "A", id = names_A, date = dates_wanted, unique = TRUE)
names_B <- CJ(group = "B", id = names_B, date = dates_wanted, …Run Code Online (Sandbox Code Playgroud) 我有一个表 T1,我想要一个具有两倍行数的新表:一个额外的列,该列获取 0(对于 T1 的一个副本)和 1(对于 T1 的第二个副本)。
换句话说,我想将 T1 与具有一个布尔列和所有可能值的常量表交叉连接。
在 MySQL 中执行此操作的最佳/最有效/更合适的方法是什么?
如果其中一个表没有任何行,则有时Cross join不返回任何行
例如
WITH q1
AS ( SELECT 1 AS V1
WHERE 0 <> 0
),
q2
AS ( SELECT 2 AS V2
)
SELECT *
FROM q1 ,
q2
Run Code Online (Sandbox Code Playgroud)
我希望这个查询将返回一行V1 = null和V2 = 2,但它不返回任何行
有什么解释吗?
假设您在BigQuery中有以下表格:
A = user1 | 0 0 |
user2 | 0 3 |
user3 | 4 0 |
Run Code Online (Sandbox Code Playgroud)
交叉加入后,你有
dist = |user1 user2 0 0 , 0 3 | #comma is just showing user val seperation
|user1 user3 0 0 , 4 0 |
|user2 user3 0 3 , 4 0 |
Run Code Online (Sandbox Code Playgroud)
如何在BigQuery中执行行聚合以计算跨行的成对聚合.作为典型用例,您可以计算两个用户之间的欧氏距离.我想在两个用户之间计算以下指标:
sum(min(user1_row[i], user2_row[i]) / abs(user1_row[i] - user2_row[i]))
Run Code Online (Sandbox Code Playgroud)
为每对用户总结了所有i.
例如,在Python中,您只需:
for i in np.arange(row_length/2)]):
dist.append([user1, user2, np.sum(min(r1[i], r2[i]) / abs(r1[i] - r2[i]))])
Run Code Online (Sandbox Code Playgroud) 我在PostgreSQL 9.4中有一个SQL查询,虽然由于我从中提取数据的表格更复杂,但归结为以下内容:
SELECT entry_date, user_id, <other_stuff>
FROM <tables, joins, etc>
GROUP BY entry_date, user_id
WHERE <whatever limits I want, such as limiting the date range or users>
Run Code Online (Sandbox Code Playgroud)
结果是每个用户每天有一行,我有数据.通常,此查询将在一个月的entry_date期间运行,期望的结果是每个用户每月有一行.
问题是每个月的每个用户可能没有数据,并且此查询仅返回包含数据的天数的行.
是否有某种方法可以修改此查询,以便每个用户每天返回一行,即使某些行中没有数据(日期和用户除外)?
我尝试使用a进行连接generate_series(),但这不起作用 - 它可以使没有错过的日子,但不是每个用户.我真正需要的是"为列表中的每个用户生成一系列(user,date)记录"
编辑:澄清一下,我要找的最终结果是,对于数据库中的每个用户 - 定义为用户表中的记录 - 我希望每个日期有一行.因此,如果我在where子句中指定日期范围5/1/15-5/31/15,我希望每个用户有31行,即使该用户在该范围内没有数据,或者只有几个数据天.
我有2个表包含一个名称部分的列,即John Doe有一行John和一个Doe.这两个表中有不同的名称.我需要从一个表中取名称部分,并将DIFFERENCE得分计算到另一个表中的名称部分.现在我正在使用内部和外部游标来遍历两个表中的每一个.这有效,但需要很长时间才能运行.
有没有不同的方法来加快这个速度?
我正在尝试做的一个例子:
表格1
Name
----
John
Doe
Jan
Smith
Run Code Online (Sandbox Code Playgroud)
表2
Name
-----
Henry
Ford
Ransom
Eli
Olds
Run Code Online (Sandbox Code Playgroud)
这就是我需要的:
DIFFERENCE('John','Henry')
DIFFERENCE('John','Ford')
DIFFERENCE('John','Ransom')
DIFFERENCE('John','Eli')
DIFFERENCE('John','Olds')
DIFFERENCE('Doe','Henry')
DIFFERENCE('Doe','Ford')
DIFFERENCE('Doe','Ransom')
DIFFERENCE('Doe','Eli')
DIFFERENCE('Doe','Olds')
DIFFERENCE('Jane','Henry')
DIFFERENCE('Jane','Ford')
DIFFERENCE('Jane','Ransom')
DIFFERENCE('Jane','Eli')
DIFFERENCE('Jane','Olds')
DIFFERENCE('Smith','Henry')
DIFFERENCE('Smith','Ford')
DIFFERENCE('Smith','Ransom')
DIFFERENCE('Smith','Eli')
DIFFERENCE('Smith','Olds')
Run Code Online (Sandbox Code Playgroud)
现在,我将这些DIFFERENCE分数保存在临时表中以用于测试目的.抱歉没有格式化,我是新来发布的.谢谢你的帮助.
我想知道为什么条件交叉联接必须具有WHERE子句中指定的条件,以及为什么它在'ON'子句中不起作用。请参阅编译示例的链接:http : //rextester.com/IKY8693
业务环境:我需要生成一个开始日期和结束日期之间的日期列表,以填补空白,以便与第三张表保持连接,以便在特定月份返回零/空值。
我是如何做到的:让我们以一个带有YYYYMM开始和结束日期的用户表为例。
| user_id | start_yearmonth | end_yearmonth |
|---------|-----------------|---------------|
| u9876 | 201504 | 201610 |
| u5564 | 201602 | 201612 |
| u4435 | 201606 | NULL |
Run Code Online (Sandbox Code Playgroud)
要交叉连接的表是所需的YYYYMM日期的表。
| yearmonth |
|-----------|
| 201601 |
| 201602 |
| 201603 |
| 201604 |
| 201605 |
| 201606 |
| 201607 |
| 201608 |
| 201609 |
| 201610 |
| 201611 |
| 201612 |
| 201701 | …Run Code Online (Sandbox Code Playgroud) cross-join ×10
sql ×6
data.table ×3
r ×3
sql-server ×3
postgresql ×2
aggregation ×1
inner-join ×1
join ×1
mysql ×1
t-sql ×1
time-series ×1