我们的数据库中有一个ORDER BY的视图.现在,我意识到观点通常不会排序,因为不同的人可能会将它用于不同的事情,并希望它有所不同.然而,该视图用于需要特定订单的非常特定的用例.(这是足球联赛的球队排名.)
该数据库是Windows Server 2003 R2上的Sql Server 2008 Express,v.10.0.1763.0.
视图定义如下:
CREATE VIEW season.CurrentStandingsOrdered
AS
SELECT TOP 100 PERCENT *, season.GetRanking(TEAMID) RANKING
FROM season.CurrentStandings
ORDER BY
GENDER, TEAMYEAR, CODE, POINTS DESC,
FORFEITS, GOALS_AGAINST, GOALS_FOR DESC,
DIFFERENTIAL, RANKING
Run Code Online (Sandbox Code Playgroud)
它返回:
GENDER, TEAMYEAR, CODE, TEAMID, CLUB, NAME,
WINS, LOSSES, TIES, GOALS_FOR, GOALS_AGAINST,
DIFFERENTIAL, POINTS, FORFEITS, RANKING
Run Code Online (Sandbox Code Playgroud)
现在,当我对视图运行SELECT时,它按GENDER,TEAMYEAR,CODE,TEAMID命令结果.请注意,它是按TEAMID而不是POINTS排序,因为order by子句指定.
但是,如果我复制SQL语句并完全按照新查询窗口中的方式运行它,它将按照ORDER BY子句的指定正确排序.
这是一个无聊的问题,但是我从来没有得到过直接的回答.
假设我有一个包含以下字段和值的数据库表:
| id | date_added | balance |
+------------------------------------+
| 1 | 2009-12-01 19:43:22 | 1237.50 |
| 2 | 2010-01-12 03:19:54 | 473.00 |
| 3 | 2010-01-12 03:19:54 | 2131.20 |
| 4 | 2010-01-20 11:27:31 | 3238.10 |
| 5 | 2010-01-25 22:52:07 | 569.40 |
+------------------------------------+
Run Code Online (Sandbox Code Playgroud)
这是一个非常基本的"会计"子系统.我想获得最新的余额.该id字段设置为auto_increment.通常,我会使用:
SELECT balance FROM my_table ORDER BY date_added DESC LIMIT 1;
但我需要确保返回的值是最新的...(参见上面的id#2和3)
1)我会更好地使用:
SELECT balance FROM my_table ORDER BY id DESC LIMIT 1;
2)或者这是一个更好的解决方案?:
SELECT …
我需要在特定的表中找到列,这没有问题:
SHOW COLUMNS FROM tablename LIKE '%ColumnPrefix%';
Run Code Online (Sandbox Code Playgroud)
但是我需要知道它们将被返回的顺序,最好选择按字母顺序排序结果.我没有运气使用ORDER BY.
有任何想法吗?
我今天遇到了一个问题,
SELECT col1,'yes' as col2 FROM myTable
WHERE col2=TRUE
UNION
SELECT col1,'no' as col2 FROM mytable
WHERE col2=FALSE
ORDER BY 1,2
Run Code Online (Sandbox Code Playgroud)
我认为它将按第一列排序然后第二列,但由于涉及UNION,我有点不确定是否有人可以解释此查询的确切含义
我有一个order_by的循环:created_at和:desc
<% for comment in post.comments.order_by([:created_at, :desc]) %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
如何在每个块中执行order_by([:created_at,:desc]),ej:
<% post.comments.each do |comment|%>
<% end %>
Run Code Online (Sandbox Code Playgroud)
编辑
对我来说工作正常的代码:
post.comments.order([:created_at, :desc])[0,5].each do |comment|
Run Code Online (Sandbox Code Playgroud)
用[0,5]将结果限制为间隔.
什么是最好,最简单的方法?我的查询目前是:
SELECT *
FROM chat
WHERE (userID = $session AND toID = $friendID)
OR (userID = $friendID AND toID = $session)
ORDER BY id
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
这显示前10行,而不是最后10行.
编辑:我想要最后10行(是的,DESC这样做)但是我希望它们以ASCENDING顺序返回.
尝试按时间戳值排序某些结果时遇到问题.
我想根据时间戳值将这些结果从最新显示到最旧显示.
所以要解释一下,想象一下有3个结果:
2012-07-11 17:34:57
2012-07-11 17:33:28
2012-07-11 17:33:07
Run Code Online (Sandbox Code Playgroud)
这个结果集将是我需要的,但给出以下查询
SELECT timestamp
FROM randomTable
ORDER BY timestamp ASC
Run Code Online (Sandbox Code Playgroud)
我明白了:
2012-07-11 17:34:57
2012-07-11 17:33:07
2012-07-11 17:33:28
Run Code Online (Sandbox Code Playgroud)
这是因为它按数值排序并且07在之前28.
如果我按降序排序,我得到
2012-07-11 17:33:07
2012-07-11 17:33:28
2012-07-11 17:34:57
Run Code Online (Sandbox Code Playgroud)
这就是我正在寻找的......但它正好相反.
所以我的问题很简单,我怎么能按照我的描述按升序对这些值进行排序?
编辑:

EDIT2:
CREATE TABLE `user_quotations` (
`id` int(100) NOT NULL AUTO_INCREMENT,
`quoteNumber` int(100) NOT NULL,
`lastModified` datetime NOT NULL,
`userId` int(100) NOT NULL,
`manufacturer` varchar(250) COLLATE latin1_general_ci NOT NULL,
`modelNumber` varchar(250) COLLATE latin1_general_ci NOT NULL,
`productDesc` varchar(1000) COLLATE latin1_general_ci NOT NULL, …Run Code Online (Sandbox Code Playgroud) 我有字符串如M1 M3 M4 M14 M30 M40等(字母后面的任何int 2-3位数)当我执行"ORDER BY name"时,它返回:
M1, M14, M3, M30, M4, M40
当我想要:
M1, M3, M4, M14, M30, M40
它将整个事物视为字符串,但我想将其视为字符串+ int
有任何想法吗?
我有一个存储过程与以下查询:
SELECT (sum(addition)) AS [COUNT],
MAX(CONVERT(VARCHAR(12),CREATED,102)) as [date]
FROM [TABLE_ONE]
WHERE convert(VARCHAR(12),CREATED,102) BETWEEN CONVERT(date,@startdate) AND CONVERT(date,@enddate)
AND [ServiceID]=@serid
GROUP BY CONVERT(VARCHAR(12),CREATED,102)
ORDER BY CONVERT(VARCHAR(12),CREATED,102)
Run Code Online (Sandbox Code Playgroud)
我需要做一个union all,所以我可以从两个表中获得结果的总和,并且我希望结果按照相同的方式进行分组和排序.
这不起作用:
SELECT (sum(addition)) AS [COUNT],
MAX(CONVERT(VARCHAR(12),CREATED,102)) as [date]
FROM [TABLE_ONE]
WHERE convert(VARCHAR(12),CREATED,102) BETWEEN CONVERT(date,@startdate) AND CONVERT(date,@enddate)
AND [ServiceID]=@serid
GROUP BY CONVERT(VARCHAR(12),CREATED,102)
ORDER BY CONVERT(VARCHAR(12),CREATED,102)
UNION ALL
SELECT (sum(addition)) AS [COUNT],
MAX(CONVERT(VARCHAR(12),CREATED,102)) as [date]
FROM [TABLE_TWO]
WHERE convert(VARCHAR(12),CREATED,102) BETWEEN CONVERT(date,@startdate) AND CONVERT(date,@enddate)
AND [ServiceID]=@serid
GROUP BY CONVERT(VARCHAR(12),CREATED,102)
ORDER BY CONVERT(VARCHAR(12),CREATED,102)
Run Code Online (Sandbox Code Playgroud)
我想订购整体结果,并按日期分组.
美好的一天.所以,每个标志都在标题:)
我希望合并两个请求的结果并将结果排序在一起(因为不是一个接一个).=>我正在考虑应用一个联合并订购它们.它没用.
我在这里看了一下Stack或者这里的developpez(!!法国网站).我尝试了不同的例子和建议,但没有成功.从我的红色看来,这是因为我正在研究Mysql.
无论如何,这是我的尝试,结果:
我原来的2个要求
SELECT * FROM user_relation WHERE from_user_id = 1
List item
SELECT * FROM user_relation WHERE to_user_id = 1
Run Code Online (Sandbox Code Playgroud)
这个列表的结果由teh frist select(由索引键编排)的结果组成,后面是由Index KEy排序的第二个选择的结果.
尝试1:
(SELECT * FROM user_relation WHERE from_user_id = 1 ORDER BY trust_degree)
UNION
(SELECT * FROM user_relation WHERE to_user_id = 1 ORDER BY trust_degree)
Run Code Online (Sandbox Code Playgroud)
请求已运行,但结果与原始请求相同:首先选择的结果(按索引键排序),然后是第二个请求的结果
尝试2:
(SELECT * FROM user_relation WHERE from_user_id = 1 ORDER BY trust_degree)
UNION
(SELECT * FROM user_relation WHERE to_user_id = 1 ORDER BY trust_degree) …Run Code Online (Sandbox Code Playgroud)