我有以下SQL查询
SELECT * FROM train_stop where code='ABC' OR code='XYZ' OR code='DEF' group by number order by departs
现在因为我使用Group By
以便只使用一行具有特定数字。但我想优先考虑结果。这意味着如果我的表格有代码=' ABC'和代码=' XYZ' ,那么结果必须选择ABC
行而不是' XYZ'因为ABC在where子句中排在第一位。同样,如果表格的XYZ
和DEF
代码相同,则XYZ
必须出现在结果中,而不是DEF
。直到现在我的实验随机引导我。如果你可以指导我实现这个和适当的索引策略,我会很有帮助。谢谢。
create语句如下 -
Create Statement is `CREATE TABLE `train_stop` (
`number` varchar(1000) NOT NULL,
`stop_number` int(11) NOT NULL,
`code` varchar(1000) NOT NULL,
`station name` varchar(1000) NOT NULL,
`arrives` time NOT NULL,
`departs` time NOT NULL,
`halt` varchar(1000) NOT NULL,
`pf` varchar(1000) NOT NULL,
`day` int(11) NOT NULL,
`km` varchar(1000) NOT NULL,
`speed` varchar(1000) NOT NULL,
`elev` varchar(1000) NOT NULL,
`zone` varchar(1000) NOT NULL,
`address` varchar(1000) NOT NULL,
`active` int(11) DEFAULT '1',
KEY `index_1` (`number`(767),`code`(767)),
KEY `PIndex` (`number`(767),`stop_number`),
KEY `three_columns_idx` (`code`(767),`active`,`departs`),
KEY `two_columns_idx` (`code`(767),`active`),
KEY `two_columns_group_idx` (`number`(767),`departs`),
KEY `one_columns_group_idx` (`departs`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1`
答案 0 :(得分:3)
分组是错误的方法。这样做。每当您更改要检查的代码时,您都需要更改df1 <- structure(list(ID = c("A", "", "B", ""),
Changes = c("down from $20 to $10",
"down from $11 to $10", "down from $13 to $12", "down from $15 to $12"
)), .Names = c("ID", "Changes"), class = "data.frame",
row.names = c(NA, -4L))
df2 <- data.frame(ID=c('A', 'B'),
Changes=c('down from $20 to $10 down from $11 to $10',
'down from $13 to $12 down from $15 to $12'), stringsAsFactors=FALSE)
部分以匹配您的order by
子句。
where
在这里演示:http://sqlfiddle.com/#!9/ccc4d/7
此查询为每个有序组分配一个等级,然后仅从每个组中选择排名最高的值。如果您的电台号码为0,可能会中断
答案 1 :(得分:0)
试试这个。
SELECT *
FROM train_stop
where code='ABC'
OR ( code != 'ABC'
and code = 'XYZ' )
OR ( code != 'ABC'
and code != 'XYZ'
and code='DEF' )
group by number
order by departs
答案 2 :(得分:0)
SELECT * FROM (SELECT * FROM train_stop where code='ABC' OR code='XYZ' OR
code='DEF' order by departs ASC) as t group by t.number