好吧,我对SQL和数据库相对较新。在过去的两个月左右的时间里,我一直在学习SQLite,现在我在工作中使用了SQL 2008。我遇到了一个问题,理论上不应该很难,但是我用SQL的语法和结构遇到了砖墙。
我以为我已经习惯了它背后的逻辑,但是后来我发现的错误使我感到惊讶。因此,您可能会看到我的一系列问题。哈哈。
无论如何,这是我简而言之:
带有许多表和列的巨大数据库。
我有一个查询(Q1),它以此形式为我提供了从不同表获得的数据:
id | Info1 | Info2 | Info3 |... | InfoN
1 | ..... | ..... | 20 |... | .....
2 | ..... | ..... | 56 |... | .....
3 | ..... | ..... | 32 |... | .....
4 | ..... | ..... | 17 |... | .....
5 | ..... | ..... | 12 |... | .....
6 | ..... | ..... | 23 |... | .....
我想做的是添加另一列" date1",该列" date1"取决于以下内容:从列" ID"中获取另一个为我提供数据的查询(Q2)(在这里我使用第二行,其中ID= 2):
id | Date1 | Date2 | ... | OtherinfoN | Qty
2 | 03/25 | ..... | ... | .......... | 10
2 | 03/27 | ..... | ... | .......... | 6
2 | 03/26 | ..... | ... | .......... | 54
2 | 03/30 | ..... | ... | .......... | 2
现在,此查询的数据由" date2"列排序的数据。话虽如此,我想使用原始表中的" info3"数据(对于ID = 2,将是Info3 = 56)来弄清楚" date1"的QTY加起来或超过此信息3数字。
阐明我在说什么:
- 我会从顶部开始查看数量。
- 做10 = 56,否。
- 然后移至下一行,执行10 6 = 56,否。
- 然后移至下一行,做10 6 54 = 56,是的!
- 停止,查看" date1",那将是第一列中" date1"列的值。(03/26)
因此,最终结果应该给我我要查询3(Q3):
id | Info1 | Info2 | Info3 |... | InfoN | Date1
1 | ..... | ..... | 20 |... | ..... | .....
2 | ..... | ..... | 56 |... | ..... | 03/26
3 | ..... | ..... | 32 |... | ..... | .....
4 | ..... | ..... | 17 |... | ..... | .....
5 | ..... | ..... | 12 |... | ..... | .....
6 | ..... | ..... | 23 |... | ..... | .....
希望我能使自己清晰。
我认为结构看起来像这样:
SELECT (Columns from Q1), Date1
FROM (SELECT etc from Q1)
JOIN (SELECT etc from Q2 maybe more nested SELECT statements)
,但显然我不知道SQL足以完成这项工作。尝试学习新知识并在高质量水平上应用它真的很棘手。
如果有人可以帮助我解决我的问题的任何部分,我将不胜感激。我非常擅长将不同的解决方案拼凑在一起。因此,我会接受任何建议。
看起来您想在Q2中的QTY总数中找到记录大于Q1的Info3值。
窗口函数非常方便这种查询:
select *
from (
select Q1.*,
Q2.Date1,
sum( Q2.Qty ) over( partition by Q2.id order by Q2.Date1 ) as running_total
from Q1
left join
Q2
on Q1.id = Q2.id
) as running_total_query
where running_total >= info3
示例SQL小提琴