嗨,任何人都可以指出我们如何将order by子句作为命名参数传递给hql
例如:
作品:
select tb from TransportBooking as tb
and TIMESTAMP(tb.bookingDate, tb.bookingTime) >= current_timestamp() order by tb.bookingDate
Run Code Online (Sandbox Code Playgroud)
不起作用:
select tb from TransportBooking as tb
and TIMESTAMP(tb.bookingDate, tb.bookingTime) >= current_timestamp() order by :order
Run Code Online (Sandbox Code Playgroud) 我有一个tSQL查询,它从一个表中获取数据并将其复制到一个新表中,但只有满足特定条件的行:
SELECT VibeFGEvents.*
INTO VibeFGEventsAfterStudyStart
FROM VibeFGEvents
LEFT OUTER JOIN VibeFGEventsStudyStart
ON
CHARINDEX(REPLACE(REPLACE(REPLACE(logName, 'MyVibe ', ''), ' new laptop', ''), ' old laptop', ''), excelFilename) > 0
AND VibeFGEventsStudyStart.MIN_TitleInstID <= VibeFGEvents.TitleInstID
AND VibeFGEventsStudyStart.MIN_WinInstId <= VibeFGEvents.WndInstID
WHERE VibeFGEventsStudyStart.excelFilename IS NOT NULL
ORDER BY VibeFGEvents.id
Run Code Online (Sandbox Code Playgroud)
使用该表的代码依赖于它的顺序,上面的副本不保留我预期的顺序.也就是说,新表VibeFGEventsAfterStudyStart中的行在VibeFGEventsAfterStudyStart.id复制的列中不会单调增加VibeFGEvents.id.
在TSQL怎么可能我是从维护中行的排序VibeFGEvents中VibeFGEventsStudyStart?
我有一张桌子如下
Rate Effective_Date
---- --------------
5.6 02/02/2009
5.8 05/01/2009
5.4 06/01/2009
5.8 12/01/2009
6.0 03/15/2009
Run Code Online (Sandbox Code Playgroud)
我应该找到对当前日期和之后有效的所有费率.因此,为了获得当前有效率,我使用
SELECT TOP 1 * from table
where effective_date < '05/05/2009'
order by effective date desc
Run Code Online (Sandbox Code Playgroud)
查询当前日期之后的费率
SELECT * from table
where effective_date > '05/05/2009'
Run Code Online (Sandbox Code Playgroud)
要结合这两个结果,我使用union作为
SELECT TOP 1 * from table
where effective_date < '05/05/2009'
order by effective date desc
UNION
SELECT * from table
where effective_date > '05/05/2009'
Run Code Online (Sandbox Code Playgroud)
预期的结果是
Rate Effective Date
---- --------------
5.8 05/01/2009
5.4 06/01/2009
5.8 12/01/2009
6.0 03/15/2009
Run Code Online (Sandbox Code Playgroud)
但我得到了实际的结果 …
这是查询(最大的表有大约40,000行)
SELECT
Course.CourseID,
Course.Description,
UserCourse.UserID,
UserCourse.TimeAllowed,
UserCourse.CreatedOn,
UserCourse.PassedOn,
UserCourse.IssuedOn,
C.LessonCnt
FROM
UserCourse
INNER JOIN
Course
USING(CourseID)
INNER JOIN
(
SELECT CourseID, COUNT(*) AS LessonCnt FROM CourseSection GROUP BY CourseID
) C
USING(CourseID)
WHERE
UserCourse.UserID = 8810
Run Code Online (Sandbox Code Playgroud)
如果我运行它,它会很快执行(大约.05秒).它返回13行.
当我ORDER BY在查询末尾添加一个子句(按任何列排序)时,查询大约需要10秒.
我现在在生产中使用这个数据库,一切正常.我所有的其他疑问都很快.
有什么想法可能是什么?我在MySQL的查询浏览器中运行查询,并从命令行运行.这两个地方都很慢了ORDER BY.
编辑: Tolgahan ALBAYRAK解决方案的工作原理,但谁能解释为什么它的工作原理?
我有一个查询sqlite3数据库,它提供了排序数据.数据基于varchar列"名称" 列进行排序.现在当我进行查询时
select * from tableNames Order by Name;
Run Code Online (Sandbox Code Playgroud)
它提供这样的数据.
Pen
Stapler
pencil
意味着它正在考虑区分大小写的东西.我想要的方式如下
Pen
pencil
Stapler
那么我应该在sqlite3数据库中进行哪些更改以获得必要的结果?
可能重复:
按SQL IN()子句中的值顺序排序
使用如下查询:
SELECT * FROM images WHERE id IN (12,9,15,3,1)
Run Code Online (Sandbox Code Playgroud)
是否可以通过IN子句的内容对结果进行排序?
我正在寻找的结果将是这样的:
[0] => Array
(
[id] => 12
[file_name] => foo
)
[1] => Array
(
[id] => 9
[file_name] => bar
)
[2] => Array
(
[id] => 15
[file_name] => baz
)
...
Run Code Online (Sandbox Code Playgroud) 假设我们有一个大的点列表List<Point> pointList(已经存储在内存中),其中每个点都Point包含X,Y和Z坐标.
现在,我想选择N%的点,其中存储的所有点的Z值最大pointList.现在我这样做:
N = 0.05; // selecting only 5% of points
double cutoffValue = pointList
.OrderBy(p=> p.Z) // First bottleneck - creates sorted copy of all data
.ElementAt((int) pointList.Count * (1 - N)).Z;
List<Point> selectedPoints = pointList.Where(p => p.Z >= cutoffValue).ToList();
Run Code Online (Sandbox Code Playgroud)
但我有两个内存使用瓶颈:首先是在OrderBy期间(更重要),第二是在选择点时(这不太重要,因为我们通常只想选择少量的点).
是否有任何方法可以用更少内存的东西替换OrderBy(或者可能是其他方式找到这个截止点)?
这个问题非常重要,因为LINQ会复制整个数据集,对于我正在处理的大文件,它有时会达到几百MB.
我在Heroku部署上遇到了一个奇怪的问题,我似乎无法在本地复制.基本上当我在特定模型上找到所有内容而不是按ID排序时,它似乎根本无法返回它们.
通常记录如下:
>> Model.all
=> [<model id: 2>,<model id: 1>,<model id: 3>,<model id: 4>,<model id: 5>]
Run Code Online (Sandbox Code Playgroud)
... 等等.
如果我明确地调用Model.order("id ASC")它,则按预期返回模型.
是什么赋予了?为什么会发现所有不按降序ID顺序返回对象?
我在cakephp做项目.
我想在cakephp Style中写下面的查询.我写了50%.请帮我
$这个 - >登录 - >找到( '全部')
SELECT * FROM login
ORDER BY FIELD(profile_type, 'Basic', 'Premium') DESC;
Run Code Online (Sandbox Code Playgroud) 在MSDN文档说,当我们写
SELECT TOP(N) ..... ORDER BY [COLUMN]
Run Code Online (Sandbox Code Playgroud)
我们得到排序的前(n)行column(asc或desc取决于我们选择的内容)
但是如果我们没有指定任何顺序,msdn random就像这里Gail Erickson指出的那样说.正如他所指出的它应该是而不是.但正如那点那样unspecifiedrandom
Thomas Lee
当TOP与ORDER BY子句一起使用时,结果集仅限于前N个有序行; 否则,它返回前N个行ramdom
所以,我在没有任何索引的表上运行此查询,首先我运行了这个..
SELECT *
FROM
sys.objects so
WHERE
so.object_id NOT IN (SELECT si.object_id
FROM
sys.index_columns si)
AND so.type_desc = N'USER_TABLE'
Run Code Online (Sandbox Code Playgroud)
然后在其中一个表中,(实际上我在上面查询返回的所有表中尝试了下面的查询)并且我总是得到相同的行.
SELECT TOP (2) *
FROM
MstConfigSettings
Run Code Online (Sandbox Code Playgroud)
这总是返回相同的2行,对于查询1返回的所有其他表也是如此.现在执行计划显示3个步骤..

正如您所看到的,没有索引查找,它只是一个纯表扫描,并且

的Top行示出了实际不为2,也是如此的Table Scan; 事实并非如此(我有很多行).
但是,当我运行类似的东西
SELECT TOP (2) *
FROM
MstConfigSettings
ORDER BY
DefaultItemId
Run Code Online (Sandbox Code Playgroud)
执行计划显示

和

所以,当我不申请时ORDER …
sql-order-by ×10
sql ×3
sql-server ×3
mysql ×2
t-sql ×2
activerecord ×1
c# ×1
cakephp ×1
hibernate ×1
hql ×1
java ×1
linq ×1
memory ×1
orm ×1
php ×1
select ×1
select-into ×1
sqlite ×1
union ×1