我在SQLite数据库中有2个表,我通过PHP访问它
这是样本数据,它足以描述我想要做的但不是为什么
让我们称这些表为:TableA
,TableB
和TableC
------------------------
| Unique_ID | Name |
------------------------
| 1 | Sam |
------------------------
| 2 | Bob |
------------------------
| 3 | Jill |
------------------------
*Assume more rows for other possible foreign keys below
--------------------------------------------
| Unique_ID | Foreign_Key | Time_Stamp |
--------------------------------------------
| 1 | 1 | 1495298339 |
--------------------------------------------
| 2 | 1 | 1495298350 |
--------------------------------------------
| 3 | 1 | 1495298365 |
--------------------------------------------
我想要的输出是什么?
------------------------------------
| Name | First_Time | Last_Time |
------------------------------------
| Sam | 1495298339 | 1495298365 |
------------------------------------
| Jill | 1495298787 | 1495298805 |
------------------------------------
基本上我想把第一张和最后一张时间戳放到第一张表中,但是我不知道怎么做这个连接线,或者如果它甚至可能,多层选择查询的结果有限,只有1?<登记/>
我希望有一种方法可以避免遍历TableA
中的每个值并进行两个单独的查询来获取Time_Stamp
中的第一个(最低)和最后一个({1}}
答案 0 :(得分:2)
您可以在第一个表和第二个表的已处理版本之间进行连接。第二个表是使用Foreign_Key
的组,计算值是Time_Stamp
的最小值和最大值。像这样:
select A.Unique_Id, B.First_Time, B.Last_Time
from TableA as A
join (
select Foreign_Key, min(Time_Stamp) as First_Time, max(Time_Stamp) as Last_Time
from Table B
group by Foreign_Key
) as B
on A.Unique_Id = B.Foreign_Key
答案 1 :(得分:1)
SELECT table1.Name, MIN( table2 .Time_Stamp ) AS firstTime, MAX( table2 .Time_Stamp ) AS lastTime
FROM `table1`
LEFT OUTER JOIN table2 ON table1.Unique_Id = table2.Unique_Id
GROUP BY table1.Unique_Id
希望这会对你有所帮助。
答案 2 :(得分:1)
SELECT TableA.name, MIN(TableB.timeid), MAX(TableB.timeid) FROM TableA
INNER JOIN TableB ON TableA.id = TableB.TableA_id
GROUP BY TableB.TableA_id