好吧,我对SQL和数据库比较陌生。我从SQLite开始学习过去两个月左右,现在我在工作中使用MS SQL 2008。我遇到了一个理论上不应该很难的问题,但是我在SQL语法和结构上遇到了问题。
我以为我已经习惯了它背后的逻辑,但后来我得到了让我惊讶的错误。所以你可能会看到我的一系列问题。哈哈。
无论如何,这就是我的简要说明:
包含许多表和列的庞大数据库。
我有一个查询(Q1),它以这种形式提供从不同表格中获取的数据:
id | Info1 | Info2 | Info3 |... | InfoN
1 | ..... | ..... | 20 |... | .....
2 | ..... | ..... | 56 |... | .....
3 | ..... | ..... | 32 |... | .....
4 | ..... | ..... | 17 |... | .....
5 | ..... | ..... | 12 |... | .....
6 | ..... | ..... | 23 |... | .....
我想要做的是添加另一列," 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"数量是否加起来或超过此Info3数字。
说出我在说什么:
所以最后的结果应该给我哪个查询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,无法完成这项工作。尝试学习新东西并以高质量水平应用它是非常棘手的。
如果有人可以帮我解决问题的任何部分,我会很感激。我非常擅长从不同的解决方案中拼凑出来。所以我会接受任何建议。
答案 0 :(得分:0)
看起来你想找到Q2中Qty的运行总量大于Q1的info3值的记录。
Window functions对于这种查询非常方便:
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小提琴here