- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个表很容易连接,第三个表给我带来了麻烦。首先是表格:
tbl_customer
id dt value group
a 2013-01-01 10 cavalry
a 2012-06-01 20 lance
a 2011-03-01 10 infantry
b 2013-01-01 20 court
b 2012-07-01 5 maiden
b 2005-06-01 10 chivalry
tbl_title
id dt_active dt_inactive title
a 2001-01-01 2012-01-01 mister
a 2012-01-02 3001-01-01 sir
a 2012-01-02 3001-01-01 king
b 2001-01-01 2012-01-01 miss
b 2012-01-02 3001-01-01 lady
b 2012-01-02 3001-01-01 queen
这很容易加入以返回给定 ID 的标题,使用:
SELECT
id, dt, value, title
FROM
tbl_customer AS cust
INNER JOIN tbl_title AS titles
ON titles.id = cust.id
AND dt >= titles.dt_active
AND dt <= titles.dt_inactive
这将返回 tbl_customer
中的所有行,其中有一些重复行,其中有多个“事件”标题。例如,tbl_customer
中的第一行返回两次,一次是“king”,一次是“sir”作为 title
。
我有第三个表将组链接到标题。它可以帮助解决这些关系:
tbl_group
group title rank
cavalry sir 10
lance king 20
infantry mister 30
court lady 10
court queen 20
maiden lady 10
chivalry miss 5
然后我可以连接表格以包含来自 tbl_group
的标题并将结果限制为匹配的结果:
SELECT
id, dt, value, titles.title
FROM
tbl_customer AS cust
INNER JOIN tbl_title AS titles
ON titles.id = cust.id
AND dt >= titles.dt_active
AND dt <= titles.dt_inactive
INNER JOIN tbl_group AS group
ON group.group = cust.group
WHERE
titles.title = group.title
这在很大程度上解决了我的问题。当 tbl_title
中有多个“事件”记录时,第三个表有助于消除歧义。
但是,有一个问题。第三个表也可以有多个与组关联的标题。因此,最终输出中仍然可能存在重复。在上面的例子中,“cavalry”明确地与头衔“sir”相关联。但是,“court”组可以是“lady”或“queen”,tbl_title
也没有任何帮助,因为“lady”和“queen”在 tbl_customer
.
此时,除了tbl_group
中的“rank”,我别无选择。 “Queen”比“lady”高 20 比 10,所以我想在 tbl_customer
中使用该标题作为条目。如果排名相等,我只想使用 tbl_group
中的第一条记录。 (这可以通过某种内部排序来解决吗?)
棘手的部分是在排名之前需要考虑活跃/不活跃的动态。例如,我不想首先为每个组的一个标题过滤 tbl_group
,因为这会阻止基于日期的可能匹配。
理想情况下,我需要从显示标题的 tbl_customer
的每个条目返回一行,首先基于事件/非事件日期。接下来,我想使用 tbl_group
消除重复项。最后,我想使用 tbl_group
中的匹配和排名将结果限制为 tbl_customer
中每个条目仅一行。这可能吗?
最佳答案
首先,一些实际的表架构会有所帮助,因为您提供的表数据缺少一些关键元素。每个表中的键是什么?即,什么可以用来唯一标识每个表中的一行? customer 和 title 表中的 id
列代表什么?当然不是客户标识符,因为有重复项。
其次,要回答您的问题,您可以使用 Row_Number
等排名函数对列表中的项目进行排名,并且只返回给定集合的第一个项目:
With RnkItems As
(
Select C.id, C.dt, C.value, T.Title
, Row_Number() Over ( Partition By C.id, C.dt, C.value, C.[group]
Order By G.rank Desc ) As Rnk
From tbl_customer As C
Join tbl_title As T
On T.id = C.id
And C.dt Between T.dt_active And T.dt_inactive
Join tbl_group As G
On G.[group] = C.[group]
And G.title = T.title
)
Select id, dt, value, title
From RnkItems
Where Rnk = 1
关键是 Partition By C.id, C.dt, C.value, C.[group]
语句。为什么所有四列?原因是我不知道什么唯一标识客户行。如果该表上有一个主键,我们可以简单地按它进行分区。
关于sql - 跨表的困难 SQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18875620/
tuple :: (Integer a,Fractional b) => (a,b,String) tuple = (18,5.55,"Charana") 所以这是给我的错误 ‘Integer’ is
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我已经习惯了python和django,但我最近开始学习java。由于工作原因我没有太多时间,所以错过了很多类(class),现在我有点困惑,我必须做作业。 编辑 该程序应该根据每个运动员在自行车和比
这是一个困难的问题,但对专业人士来说很容易。 我在 mysql 中有以下字段:产品名称、mycost、sellprice 和 stock。因为我需要知道每种产品对我的商店的投资有多少,所以我创建了以下
我有 3 个表,其中已包含以下行: TBL_TESTER_LIST id tester_type tester_name 1 LMX LMX-01 2 LMX
我想只使用 GridBagLayout 来布局组件,如图所示。 我已经尝试了几个约束,但它永远不会以预期的结果结束,所以我想知道仅使用 GridBagLayout 是否真的可行。难点在于C1、C2、C
我遇到了以下代码没有结果的问题。但是,如果我取消注释掉指定的行,并注释掉它起作用的 bind_param 行,但这不是破坏了 mysqli 的目的吗?我的 var_dump 给了我的字符串(1)“1”
这个问题在这里已经有了答案: a good python to exe compiler? [closed] (3 个答案) 关闭 9 年前。 有了我之前问题的一些有用答案(见下文),我决定再试一次
我正在使用 Hadoop 分析 GSOD 数据 (ftp://ftp.ncdc.noaa.gov/pub/data/gsod/)。我选择了 5 年来执行我的实验 (2005 - 2009)。我配置了一
我在我的 macOS 应用程序的设置面板中使用 NSGridView。我是这样设置的: class GeneralViewController: RootViewController { pr
我正在尝试使用以下代码在 PHP 中自动安装 WordPress 发行版: $base_dir = '/home/username/wordpress_location'; chdir($base_d
在 Node.js 中将图像转换为 Base64 字符串时,我遇到了一个非常令人困惑的问题 这是我的示例代码: app.get('/image', (req, res) => { ServerAP
我在尝试运行我的应用程序时遇到一些错误,这里是 logcat java.lang.RuntimeException: Unable to instantiate activity Componen
基本上,我正在努力创建一个管理团队和球员的 Java 程序。 根据我的理解,我会有一个团队和一个玩家类。在团队类中会有 get 和 set 方法,以及某种形式的集合来正确存储球员,例如数组列表?然后在
我仍在尝试找出 JavaSwing 中的 BorderLayout,这真的很令人沮丧。 我希望能够将一个 Pane 拆分为 3 个包含的子面板,但我不完全确定如何包含它。 这是我的游戏类,它包含面板
下面的表设计(完整的模式见下文)还有很多需要改进的地方,并且已经造成了许多困难,但是我无法找出如何最好地将它们规范化。这些表格的目的是: ICD9-提供CICD9和CDESC组合的主查找。每个组合在I
这是我的表格: AB元组表 C 表,其中包含 A.id 和 B.id 的条目 D 表,其中包含带有 C.id 的条目和一个 bool 字段“open” 我想计算 D 表中“open”= true 且具
我在 YouTube 上跟踪了一个相当旧的教程,在视频中他以这种方式使用了 mysql_result: return (mysql_result($result,0) == 1) ? true : f
我正在尝试创建一个左侧面板的页面。该面板有一个页眉、一个内容区域和一个页脚。主面板包装器 div 应该是页面高度的 100%。页眉和页脚没有指定的高度,因为我只希望它们足够大以容纳其文本和填充,而我希
我有 TreeView ,我想在其中显示用户通过 file_dialog.getOpenFileNames() 选择的文件; file_dialog 是 QFileDialog。我确实创建了模型类:
我是一名优秀的程序员,十分优秀!