我正在学习SQL并且已经阅读了GalaXQL应用程序的章节.
我已经写了下面的问题来回答"Hilight the star(或星星)"这个行星在星系中具有最高轨道距离.记得在开始前清除旧的hilights.
此查询返回结果starid:23334,当插入hilight表时,允许我前进.但是,在将结果交还给我之前,程序会挂起很长时间,因此我怀疑从数据库中提取这些信息的效率要高得多.
此查询有效,但需要很长时间才能处理,如何改进此查询?
INSERT INTO hilight
SELECT DISTINCT s.starid
FROM planets AS p, stars AS s, moons AS m
WHERE s.starid=(SELECT starid
FROM planets
WHERE orbitdistance=(SELECT MAX(orbitdistance)
FROM planets));
Run Code Online (Sandbox Code Playgroud)
我在这个查询结构背后的逻辑
首先找到距离"行星"表有最大轨道距离的行星.
其次是将"最高轨道距离"的值与"行星"表的"轨道距离"字段进行比较,并返回与该字段相关的"星形".
第三步将"行星"表中的"starid"字段的值与表格"stars"中的字段"starid"进行比较,然后将"starid"插入表"hilight".
数据结构:

我正在创建一个包含许多不同类别的博客,在我的主页上,我想展示每个类别的一篇文章(除了可能是"miscelanious"),但我不确定是否有一个简单的单行解决方案.我希望有类似的东西:
"SELECT * FROM blogs WHERE cat != 'misc' ORDER BY added LIMIT (ONE OF EACH CAT TYPE)"
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?
这是我的表名 tblPE
PEID |idnum | PE_DATE_EXAM | ATTENDANCE
1 | 39 | 2014-08-01 | PRESENT
2 | 42 | 2014-08-10 | ABSENT
3 | 39 | 2014-08-12 | PRESENT
4 | 43 | 2014-08-05 | PRESENT
5 | 42 | 2014-07-15 | NULL
6 | 39 | 2014-07-03 | ABSENT
7 | 41 | 2014-08-01 | PRESENT
Run Code Online (Sandbox Code Playgroud)
我想选择最大 PE_DATE_EXAM 值,其中 idnum = 39 且 ATTENDANCE=PReSENT
结果应该是:
PEID |idnum | PE_DATE_EXAM | ATTENDANCE
-------------------------------------------
3 | 39 | 2014-08-12 | PRESENT
Run Code Online (Sandbox Code Playgroud) 假设我有下表
+-----------------------+----------------+
| PERSON | ATE |
+-----------------------+----------------+
| Joe | Chicken |
| Joe | Chicken |
| Joe | Chicken |
| Joe | Tuna |
| Joe | Tuna |
| Joe | Chicken |
| Joe | Tuna |
| Joe | Chicken |
| Joe | Tuna |
| Joe | Tuna |
| Joe | Tuna |
| Joe | Chicken |
| Joe | Tuna |
| Joe | Tuna |
| Joe …Run Code Online (Sandbox Code Playgroud) 我有这个股票价格表(这里是简化版):
+----------+--------+-------+
| Time | Ticker | Price |
+----------+--------+-------+
| 10:00:00 | A | 5 |
| 10:00:01 | A | 6 |
| 10:00:00 | B | 3 |
+----------+--------+-------+
Run Code Online (Sandbox Code Playgroud)
我想通过Ticker选择具有最大时间的行组,例如
+----------+--------+-------+
| Time | Ticker | Price |
+----------+--------+-------+
| 10:00:01 | A | 6 |
| 10:00:00 | B | 3 |
+----------+--------+-------+
Run Code Online (Sandbox Code Playgroud)
我知道如何在SQL中做到这一点,类似的问题可以在这里找到,但我不知道如何在KDB中优雅地做到这一点.
我有一个选择两次的解决方案:
select first Time, first Ticker, first Price by Ticker from (`Time xdesc select Time, Ticker, Price from table where …Run Code Online (Sandbox Code Playgroud) 我有20个教室,每个教室有50个学生.
是否可以在一个查询语句中找到每个教室中的10名最佳学生?
表"klas":
int id
int cla_id
int stu_id
int final_score
Run Code Online (Sandbox Code Playgroud) 我的内容中包含以下数据DataTable:
id vrn seenDate
--- ---- --------
1 ABC 2017-01-01 20:00:05
2 ABC 2017-01-01 18:00:09
3 CCC 2016-05-05 00:00:00
Run Code Online (Sandbox Code Playgroud)
我试图修改数据只显示vrn最近日期的值.这是我到目前为止所做的:
myDataTable.AsEnumerable().GroupBy(x => x.Field<string>("vrn")).Select(x => new { vrn = x.Key, seenDate = x.Max(y => y.Field<DateTime>("seenDate")) });
Run Code Online (Sandbox Code Playgroud)
我需要修改上面的内容以选择id字段(即我不想在这个字段上分组,但我希望将它包含在结果数据集中).
我不能放入x.Field<int>("id")该Select()部分,因为Field子句不存在.
我有数据库来存储客户和消息
我正在尝试获取所有客户及其最新消息的列表,例如 Messenger 中的第一个屏幕。
SELECT *
FROM message AS m
LEFT JOIN customer AS c ON c.id=m.sender_id
ORDER BY m.sent_at DESC
Run Code Online (Sandbox Code Playgroud)
但这会返回所有用户的所有消息。我也试过这样做
SELECT *
FROM message AS m
LEFT JOIN customer AS c ON c.id=m.sender_id
GROUP BY c.id
Run Code Online (Sandbox Code Playgroud)
但这不会在所有数据库上运行,并且无法对结果集进行排序以仅获取最新消息。
假设我得到这张表:
MyTable
+----+-------+
| ID | count |
+----+-------+
| a | 2 |
| b | 6 |
| c | 4 |
| d | 6 |
| e | 2 |
+----+-------+
Run Code Online (Sandbox Code Playgroud)
现在我想要回这个:
Result
+----+-------+
| ID | count |
+----+-------+
| b | 6 |
| d | 6 |
+----+-------+
Run Code Online (Sandbox Code Playgroud)
我想要具有最多计数值的 ID。因此,如果有多个最大值,我想要全部。我也不知道是否会有多个值,如果有的话,会有多少个。
我是SQL新手,我遇到的问题是我在表中有很多资产的价值.我需要为该表中的每个资产获得最高速度.
我试过搜索谷歌,但我发现了MAX()SQL 的功能.
我不需要,MAX()因为这只会给我一个具有最高价值的记录.我需要每个资产的最高价:
例如
iAssetId fSpeedKPH
1 78
5 77
5 80
8 74
8 81
8 88
8 111
24 71
24 78
24 79
24 79
24 82
24 84
24 90
24 91
24 92
我突出显示了每个资产的最高行,即AssetId = 1,5,24和8
这些是我需要选择的行.
什么是最有效的方式?
我是否必须遍历由我编写的SQL返回的结果集?
编辑:
我的SQL:
DECLARE @dateMinusDay datetime = DateAdd(dd, -1, GetDate())
select vm.iAssetId, max(vm.fSpeedKPH), vm.dtUTCDateTime, ge.sGeofenceName from VehicleMonitoringLog vm
inner join Geofences ge on ge.iGeofenceId = vm.iGeofenceId
where vm.iGeofenceId != 1 AND vm.fSpeedKPH …Run Code Online (Sandbox Code Playgroud)