这是一个无聊的问题,但是我从来没有得到过直接的回答.
假设我有一个包含以下字段和值的数据库表:
| 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 …
我有一个存储过程与以下查询:
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)
我想订购整体结果,并按日期分组.
是否可以为MySQL SELECT语句指定任意顺序?例如,
SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY (1, 3, 2, 9, 7);
Run Code Online (Sandbox Code Playgroud)
直接列出的数字的顺序IN似乎并不重要.
我有新闻项,在创建时将以unix时间戳格式创建日期/时间的时间添加到数据库中.如果我想按最近的顺序排序,我会在我的mysql查询中使用ASC或DESC吗?
谢谢大家的回复.我现在知道了.我会让Sarfraz回答他接受的解决方案,因为他是第一个回复,但感谢其他人:).必须等待11分钟才能接受它作为解决方案.
我的数据库中有一个表设置这个结构(http://cl.ly/3D1D3m1O0v3d0x2j0Z0E)
我通过while循环运行查询,我想按prof列的计数排序.
这是我的查询目前的样子,虽然我不断收到错误.
$order_list = mysql_query("
SELECT COUNT(prof),
FROM prof_rating
ORDER BY COUNT(prof) ASC");
Run Code Online (Sandbox Code Playgroud)
这是我不断得到的警告.
警告:mysql_fetch_assoc()期望参数1是资源,布尔值在
想象一下Shirts带有sizeCharField 的模型,其值仅限于少量选择,例如"小","中","大","xlarge"等.
要按尺寸分组衬衫,您需要:
Shirts.objects.order_by('size')
Run Code Online (Sandbox Code Playgroud)
但是Django会(自然地)按字母顺序对这些组进行排序,即"大"然后"中"然后"小"然后"xlarge".我想要的是在'大'之前'中'之前'小'等.
即我自然想要做的是类似下面的伪代码:
size_order = {'small': 1, 'medium': 2, 'large': 3, 'xlarge': 4}
Shirts.objects.order_by('size_order[size]')
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳方法是什么?
编辑:请参阅我的评论以获取有关各种建议方法的想法.我使用我正在调查的SQL ORDER BY CASE语法偶然发现了一个自定义的Manager/QuerySet方法.
我有一个包含datetime字段类型的表,我想对select语法进行排序取决于它的降序,如下所示:
2012-12-12 01:44:20
2012-12-11 01:44:40
2012-12-10 01:40:36
2012-12-09 12:28:19
2012-12-09 12:19:21
2012-12-09 12:11:50
2012-12-09 12:00:11
2012-12-09 11:59:26
2012-12-09 11:57:08
2012-12-09 11:55:21
我可以在mysql上轻松完成
select * from TABLE order by length(FIELD) asc
Run Code Online (Sandbox Code Playgroud)
我怎么能在MongoDB上做到这一点?
我想在顶部显示接近今天日期的记录,然后在底部显示过去的所有记录:
今天
明天
明天+1
。
.
.
昨天
昨天 -1