我有一点搜索,但没有发现任何类似于我想要实现的东西.
基本上,我试图找出两个用户的投票习惯之间的相似性.
我有一个表格存储每个人的投票,其中存储:
voteID
itemID (the item the vote is attached to)
userID (the user who voted)
direction (whether the user voted the post up, or down)
Run Code Online (Sandbox Code Playgroud)
我的目标是通过找出两件事来计算用户A和B之间的相似性:
(然后简单地将#2计算为#1的百分比,以实现粗略的相似性评级).
我的问题是,如何找到两个用户的投票组合之间的交集?(即如何充分计算点#1,而不是以非常低效的方式循环每一次投票.)如果他们在不同的表中,内部联接就足够了,我想......但这显然不起作用在同一张桌子上(或者它会吗?).
任何想法将不胜感激.
有人可以帮忙吗?
我有1个类,基本上它拥有成员,并且在该类中是一个List.
我在列表中的成员也......所以基本上它是这样的,
我有2个成员,每个成员都有多个会话.
我希望只用1个会话返回每个成员.
我做了一个LINQ查询,但当然它不起作用......
我想我需要做一个自我加入,任何想法?
基本上我的错误是m在我的子查询自连接中不存在.
var sessions =
from m in this.members
join s in
(
from se in m.Sessions
group se by se.Name into g
select new {Name = g.Key, SessioEndTime = g.Max(a=>a.SessioEndTime)}
)
on m.Name equals s.Name
select new { MemberName = m.Name, SessionTime = s.SessioEndTime}
Run Code Online (Sandbox Code Playgroud)
我很感激任何人的反馈.
提前致谢.
编辑
好吧,我设法像下面这样做,但这是最好的方法吗?
var sessions =
from m in this.members
let sn = m.Sessions.OrderByDescending(a => a.SessionEndTime).FirstOrDefault()
select new { MemberName = m.Name, SessionTime = sn.SessioEndTime}
Run Code Online (Sandbox Code Playgroud)
这种方式sn包含1条记录,但我可以访问所有属性...
但这是使用LET的最佳方式吗?
谢谢.
我需要数据库设计专家提出一些建议.
我有大约六个外键到一个表(缺陷),它都指向用户表中的主键.它像是:
defect (.....,assigned_to,created_by,updated_by,closed_by...)
Run Code Online (Sandbox Code Playgroud)
如果我想获得有关缺陷的信息,我可以进行六次连接.我们有更好的方法吗?
另一个是我有一个states表可以存储一个用户定义的值.我有缺陷表和任务表,我希望这两个表共享公共状态表(New,In Progress等).所以我创建了:
task (.....,state_id,imp_id,.....)defect(.....,state_id,imp_id,...)state(state_id,state_name,...)importance(imp_id,imp_name,...)有许多这样的共同属性以及状态如重要性(正常,紧急等),优先级等.对于所有这些,我想使用相同的表.我在每个表中保留一个标志以区分任务和缺陷.在这种情况下,最佳解决方案是什么?
如果有人在健康域中使用此应用程序,他们希望为其缺陷或任务分配不同的类型,状态,重要性.此外,当用户选择任何项目时,我想在配置参数部分下显示所有类型,状态等.
我在postgres数据库中有以下记录。parent_pk与父子关系中的pk相关。
pk名称类型parent_pk
------ ---- ---------
1 hnumber101房子0
2 hnumber201房子0
101道奇充电车1
102野马车1
103公车2
301约翰使用者101
302爱德华用户102
303约翰用户102
304约翰用户103
我想以以下格式从上述内容中生成一个json-
[{
“ id”:1
“ name”:“ hnumber101”,
“类型”:“房屋”
“孩子”:[{
“ id”:101,
“ name”:“道奇充电器”,
“ type”:“车辆”
“孩子”:[{
“ id”:301,
“ name”:“ john”,
“ type”:“用户”
}],
},
{
“ id”:102,
“ name”:“ mustang”,
“ type”:“车辆”
“孩子”:[{
“ id”:303,
“ name”:“ john”,
“ type”:“用户”
},
{
“ id”:302,
“ name”:“ edward”,
“ type”:“用户”
}],
}],
},
{
“ id”:2
“ name”:“ hnumber201”,
“类型”:“房屋”
“孩子”:[{
“ id”:103,
“ … 如果我更有经验,我可以使用类似的"合并行"问题来解决这个问题,但我无法让它们发挥作用.我在某些类别的accdb中有大约2000个"车库"(实际上有患者数据的诊所,但在此简化).以下是一个车库数据存在的示例:
Garage ID Car_Color Sub_Type? Color_Count
42 Blue Striped 5
42 Blue 10
42 Red 23
42 Yellow 2
Run Code Online (Sandbox Code Playgroud)
我需要将每个车库变成一个单独的记录,每种颜色作为一个单独的字段,计数,所需的输出显示在这里:
Garage ID Blue Cars (total) Blue Cars (striped) Red Cars Yellow Cars Orange Cars
42 15 5 23 2 0
Run Code Online (Sandbox Code Playgroud)
有一个子类型,这里显示为"蓝色汽车"和"蓝色汽车(条纹)".对于那些,我需要将没有子类型的"蓝色"计数与另一个"蓝色"计数相加以得到总"蓝色"计数.然后我会将Blue子类型列为单独的字段.大多数车库都没有列出橙色汽车,因此当没有橙色汽车记录时,我需要让该记录显示该字段为0,但如果有记录,则反映计数.
这似乎与其他自联接非常相似,但是我无法使计数方面起作用,或者"0"没有记录.
我想做类似的事情
SELECT e1.sender
FROM email as e1, email as e2
WHERE e1.sender = e2.receiver;
Run Code Online (Sandbox Code Playgroud)
但在 MongoDB 中。找了很多关于JOIN的论坛,可以通过MongoDB中的MapReduce实现,但是在这个例子中用self-join不明白怎么做。
我在想这样的事情:
var map1 = function(){
var output = {
sender:db.collectionSender.email,
receiver: db.collectionReceiver.findOne({email:db.collectionSender.email}).email
}
emit(this.email, output);
};
var reduce1 = function(key, values){
var outs = {sender:null, receiver:null
values.forEach(function(v) {
if(outs.sender == null){
outs.sender = v.sender
}
if(outs.receivers == null){
outs.receiver = v.receiver
}
});
return outs; }};
db.email.mapReduce(map2,reduce2,{out:'rec_send_email'})
Run Code Online (Sandbox Code Playgroud)
创建 2 个新集合 - collectionReceiver 仅包含接收者电子邮件和 collectionSender 仅包含发件人电子邮件
或者
var map2 = function(){
var output = …Run Code Online (Sandbox Code Playgroud) 我在 MS Access 中有两个表,用于跟踪班级辅导员和他们辅导的班级。这两个表的结构如下:
tbl_促进者
facilID -> a unique autonumber to keep track of individual teachers
facilLname -> the Last name of the facilitator
facilFname -> the First name of the facilitator
Run Code Online (Sandbox Code Playgroud)
tbl_facilitatorClasses
classID -> a unique autonumber to keep track of individual classes
className -> the name of the class (science, math, etc)
primeFacil -> the facilID from the first table of a teacher who is primary facilitator
secondFacil -> the facilID from the first table of another teacher …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行一个连接表自身的查询,并进行模糊字符串比较(使用trigram比较)来查找可能的公司名称匹配.我的目标是返回记录,其中一个记录的公司名称(ref_name字段)的三元组相似性与另一个记录的公司名称相匹配.目前,我的阈值设置为0.9,因此它只会返回很可能包含类似字符串的匹配项.
我知道自联接本质上可以导致许多比较,但我想尽我所能地优化我的查询.我不需要即时结果,但是目前我运行的查询需要11个小时才能运行.
我在Ubuntu 12.04服务器上运行Postgres 9.2.我不知道ref_name字段的最大长度(我匹配的字段)是什么,所以我将它设置为a varchar(300).我想知道将它设置为文本类型可能会影响性能,或者是否有更好的字段类型可用于加速性能.我LC_CTYPE和LC_COLLATE语言环境设置为"en_US.UTF-8"
我运行查询的表总共包含大约160万条记录,但运行了11个小时的查询只占一小部分(约100k).
表结构:
CREATE TABLE ref_name (
ref_name_id integer,
ref_name character varying(300),
ref_name_type character varying(2),
name_display text,
load_date timestamp without time zone
)
Run Code Online (Sandbox Code Playgroud)
索引:
CREATE INDEX ref_name_ref_name_trigram_idx ON ref_name
USING gist (ref_name COLLATE pg_catalog."default" gist_trgm_ops);
CREATE INDEX ref_name_ref_name_trigram_idx_1 ON ref_name
USING gist (ref_name COLLATE pg_catalog."default" gist_trgm_ops)
WHERE ref_name_type::text = 'E'::text;
CREATE INDEX ref_name_ref_name_e_idx ON ref_name
USING btree (ref_name COLLATE pg_catalog."default")
WHERE ref_name_type::text = 'E'::text;
Run Code Online (Sandbox Code Playgroud)
查询:
select a.ref_name_id as name_id,a.ref_name …Run Code Online (Sandbox Code Playgroud) 从这张足球运动员的表中,你如何选择球员的名字和队长的名字?
PlayerID | PlayerName | TeamCaptainID
=====================================
1 | Jay | 5
2 | John | 3
3 | James | 3
4 | Jack | 5
5 | Jeremy | 5
Run Code Online (Sandbox Code Playgroud)
我追求的结果是:
Player | Captain
================
Jay | Jeremy
John | James
James | James
Jack | Jeremy
Jeremy | Jeremy
Run Code Online (Sandbox Code Playgroud) 我正在尝试(有效地)从连接表中获取行,其中startdate是cpid中的最新行 - 对于选定的cpid.
这是一个连接表中数据的示例,其中我想要用<<<标记的行
connid cpid startdate
1 20 7/17/16
2 20 8/23/16
3 20 9/12/16 <<<
4 30 6/17/16
5 30 8/23/16 <<<
6 40 2/24/16
7 40 3/17/16
8 40 5/18/16 <<<
etc...
Run Code Online (Sandbox Code Playgroud)
此查询返回最新的startdate和cpid,但我不确定如何将其与自身连接以获得我需要的结果:
select cpid, max(startdate)
from connections
where cpid in (
20,
30,
40
)
group by cpid
Run Code Online (Sandbox Code Playgroud)
我正在寻找的结果如下:
connid cpid startdate
3 20 9/12/16
5 30 8/23/16
8 40 5/18/16
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激!
ROBM
self-join ×10
sql ×5
java ×2
json ×2
ms-access ×2
postgresql ×2
sql-server ×2
t-sql ×2
database ×1
foreign-keys ×1
inner-join ×1
join ×1
linq ×1
linq-to-sql ×1
mongodb ×1
mongodb-java ×1
mysql ×1
performance ×1
relational ×1
trigram ×1
union ×1