【发布时间】:2017-12-08 08:15:22
【问题描述】:
我做过一些编程和一些 SQL,但除了我自己的小项目外,我不是开发人员。 我现在有一个问题,我很想用纯 SQL 解决,但不知道如何解决。 我有 2 个简单的表格,我需要从中绘制月度报告,但我需要做一些计数,这是棘手的部分。 这是结构...
table
km_locations
columns
location_id INT
location_name TXT
table
km_trips
colums
trip_id INT
trip_date DATE
start_location_id INT
end_location_id INT
km_start INT
km_end INT
这里有一些规则让我无法弄清楚......
- 在特定日期范围内创建报告,例如。之间 2016 年 2 月 15 日和 2016 年 3 月 15 日。
- 将 start_location_id 和 end_location_id 替换为对应的 km_locations 中的 location_name。
- 计算我在过去 12 个月内进行了多少次类似的旅行,并 在单独的列中显示增量值。
- 也只计算行程或从本国出发的行程,并且仅在当日没有其他具有相同起点和终点目的地组合的行程时才计算。
我可以用这个语句得到下面没有total_trips的示例。
SELECT
t.trip_date,
c1.location_name AS 'trip_start',
c2.location_name AS 'trip_end',
t.km_start,
t.km_end
FROM km_trips t
LEFT JOIN km_locations c1 ON c1.location_id = t.start_location_id
LEFT JOIN km_locations c2 ON c2.location_id = t.end_location_id
WHERE t.trip_date BETWEEN '2016-02-06' AND '2016-03-10'
ORDER BY t.trip_date ASC, t.km_start ASC
想要的样本日期输出
id date trip_start trip_end km_start km_end total_trips
1 2016-02-15 Home Grocery Store 10675 10681 8
2 2016-02-15 Grocery Store Gas Station 10681 10684
3 2016-02-15 Gas Station Home 10684 10689 5
4 2016-02-16 Home Grocery Store 10689 10695 9
5 2016-02-16 Grocery Store Home 10695 10701
6 2016-02-17 Home School 10701 10723 12
7 2016-02-17 School Grocery Store 10723 10739
8 2016-02-17 Grocery Store Friends House 10739 10755
9 2016-02-17 Friends House Home 10755 10767 7
10 2016-02-18 Home Friends House 10767 10783 8
11 2016-02-18 Friends House Home 10755 10767
12 2016-02-19 Home Friends House 10767 10783 9
13 2016-02-19 Friends House Grocery Store 10783 10792
14 2016-02-19 Grocery Store Home 10792 10798 10
对于 SQL 语句来说可能太多了,但我认为视图、联合和一些疯狂的技能可能是可能的。 这是我从 Excel 转移的一个新项目,因此我愿意接受任何可以使这项工作的表结构的建议。 现在我正在尝试使用 SQLite 进行这项工作,但如果这是我唯一的选择,我将使用另一个数据库。
谢谢。
【问题讨论】:
-
开始值和结束值仅对每次行程有意义。总数与每次旅行有什么关系?
-
总数应该是在过去 12 个月内我以家为起点或终点的旅行次数。出现了一些格式错误,因此细节在规则号中“隐藏”。 4.
-
如果你能用 SQL 表达这意味着什么,你就离解决这个问题更近了一步。您可能需要制作一个衍生表,其中包含您可以
JOINin. 的行程计数。 -
Mysql 和 sqlite 是非常不同的系统。删除不相关的标签
-
简而言之,这就是我的问题,我可以创建语句来获取数据而无需增加行程计数器,但不知道何时开始获取 total_trips 数据。