我需要使用t-sql来查询两个表.第一个表是Books.第二个表是作者.对于每个Book记录,可能有多个子作者记录.我想编写一个查询,只返回为当前Book记录找到的第一个作者记录.表中有数十万条记录,因此我需要查询才能有效.
select a.FirstName, a.LastName, b.BookName
from Books b
left join
(
select TOP 1 t.BookID, t.FirstName, t.LastName
from Authors t
) a
on a.BookID = b.BookID
where b.BookClassification = 2
Run Code Online (Sandbox Code Playgroud)
这个查询不对.我只想在作者中选择与BookID匹配的前1个记录.我怎样才能得到我想要的结果?
假设我得到这张表:
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) 我试图遍历一个查询,以获取最高的createdTime。列instanceId是一个GUID(字符串),这给了我这个错误:

引用396B3850是instanceId的开头
<cfquery datasource="hostmanager" name="licenses">
SELECT *
FROM licenses
</cfquery>
<cfloop query="licenses">
<cfquery name="getHighestCreatedTime" dbtype="query">
SELECT MAX(CREATEDTIME)
FROM licenses
WHERE instanceId = #licenses.instanceId#
AND startDate = #licenses.startDate#
</cfquery>
</cfloop>
Run Code Online (Sandbox Code Playgroud) 我的SQL查询时间很糟糕.我使用的是oracle默认表:
'EMP'表
http://imageshack.us/photo/my-images/850/sinttuloxps.png/
和
'DEPT'表
http://imageshack.us/photo/my-images/19/assayp.png/
我不想让每个部门薪水最高的员工.
我正在使用SQLPLUS.
提前致谢!
还有代码:
CREATE TABLE dept (
deptno numeric(2,0) NOT NULL,
dname character varying(14),
loc character varying(13),
CONSTRAINT dept_pkey PRIMARY KEY (deptno)
);
CREATE TABLE emp (
empno numeric(4,0) NOT NULL,
ename character varying(10),
job character varying(9),
mgr numeric(4,0),
hiredate date,
sal numeric(7,2),
comm numeric(7,2),
deptno numeric(2,0),
CONSTRAINT emp_pkey PRIMARY KEY (empno),
CONSTRAINT emp_deptno_fkey FOREIGN KEY (deptno) REFERENCES dept(deptno),
CONSTRAINT emp_mgr_fkey FOREIGN KEY (mgr) REFERENCES emp(empno)
);
INSERT INTO dept (deptno, dname, loc) …Run Code Online (Sandbox Code Playgroud) 说我有一张桌子
桌上游戏
date | track_id | user_id | rating
-----------------------------------------
20170416 | 1 | 1 | 3 (***)
20170417 | 1 | 1 | 5
20170418 | 2 | 1 | 1
20170419 | 3 | 1 | 4
20170419 | 3 | 1 | 2 (***)
20170420 | 1 | 2 | 5
Run Code Online (Sandbox Code Playgroud)
我想要做的是对于每个唯一的 track_id, user_id 我想要最高评级的行。即产生下面的表格,其中(***)行被删除。
20170417 | 1 | 1 | 5
20170418 | 2 | 1 | 1
20170419 | 3 | 1 | 2
20170420 …Run Code Online (Sandbox Code Playgroud) 我想执行一个查询,仅选择给定组中的最新项目。
在此示例中,我正在跟踪货车:
check-in都会记录信息 - 里程等......delivery都会记录客户等......该表让我们了解给定的历史记录van。数据可以通过查询生成或随时存储 - 这不是问题。
id | checkin_id | delivery_id | van_id
----+------------+-------------+--------
24 | 15 | NULL | 3
25 | NULL | 28 | 3
26 | 16 | NULL | 4
27 | NULL | 29 | 3
28 | NULL | 30 | 4
29 | 17 | NULL | 5
Run Code Online (Sandbox Code Playgroud)
我可以通过使用 - 查询来查看货车的历史记录 ... WHERE van_id=3;。
相反,我希望能够获得vans他们最近的“事件”的列表。结果是这样的:
id | checkin_id …Run Code Online (Sandbox Code Playgroud) 所以在像这样的简单表格中,如何选择具有最高价值的标题?
|_title_||_value_|
|_title1_||_50652_|
|_title2_||_57465_|
|_title3_||_68565_|
|_title4_||_14645_|
Run Code Online (Sandbox Code Playgroud)
就像在这种情况下title3具有最高值,所以我想用SQL代码选择title3,但我不知道如何
我尝试过的:
SELECT title FROM table HAVING MAX(value);
Run Code Online (Sandbox Code Playgroud)
我认为这是我能做到的,但它不起作用
这可能不是那么难,但我完全不熟悉SQL
如果有人可以帮我解决这个问题,我真的很感激