现在有一张表
id  jdid  kfjg  msj 门市价 psj 平时价 zmj 周末价 qssj 起始时间 
      31 26 0 1234 150 150 1262275200 
      32 26 0 1234 148 148 1262275200 
      33 26 0 1234 188 188 1262275200 
      34 26 0 1234 168 168 1262275200 
      113 26 0 400 100 100 1272729600 
      114 26 0 99 99 99 1274630400 
      115 26 0 88 88 88 1274716800 
      116 26 0 100 1001 1001 1274544000 
数据如下
CREATE TABLE IF NOT EXISTS `gm_homtel_price` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `jdid` int(8) DEFAULT '0',
  `kfjg` int(8) DEFAULT '0',
  `msj` int(8) DEFAULT '0' COMMENT '门市价',
  `psj` int(8) DEFAULT '0' COMMENT '平时价',
  `zmj` int(8) DEFAULT '0' COMMENT '周末价',
  `qssj` int(10) DEFAULT '0' COMMENT '起始时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='酒店价格' AUTO_INCREMENT=117 ;--
-- 转存表中的数据 `gm_homtel_price`
--INSERT INTO `gm_homtel_price` (`id`, `jdid`, `kfjg`, `msj`, `psj`, `zmj`, `qssj`) VALUES
(31, 26, 0, 1234, 150, 150, 1262275200),
(32, 26, 0, 1234, 148, 148, 1262275200),
(33, 26, 0, 1234, 188, 188, 1262275200),
(34, 26, 0, 1234, 168, 168, 1262275200),
(113, 26, 0, 400, 100, 100, 1272729600),
(114, 26, 0, 99, 99, 99, 1274630400),
(115, 26, 0, 88, 88, 88, 1274716800),
(116, 26, 0, 100, 1001, 1001, 1274544000);我给定一个时间,我想查出该时间之前,但距该时间最近的时间对应的最小的psj。
比如有如下数据
jdid  kfid  psj qssj
1     1     10  123
1     1     12  124
1     2     15  128
1     2     19  129
1     3     20   100 
1     3     8    130
现在我给定qssj<=129,现在把 12 找出来。求教大家,如何完成啊?
分数不多,请大家帮帮我,谢谢

解决方案 »

  1.   

    我给定一个时间(129),我想查出该时间之前(<=129),但距该时间(129)最近的时间(124?)对应的最小的psj(12)?我怎么没看明白?
      

  2.   

    楼主的意思是说,可能有很多个124,找出其中psj最小的一个。可惜我不会写sql语句
      

  3.   

    select psj from gm_homtel_price where qssj=(select qssj from gm_homtel_price where qssj<129 order by qssj desc limit 1) order by psj limit 1;
    应该是这样吧,sql语句不太会写,不确定
      

  4.   

    楼主你的最近时间种该有一个范围吧.
    你那个时间段为什么要取时间124,怎么不取123哦
    123的psj更下呢?还只为10
      

  5.   

    分为两步:
    1、由qssj<=129中qssj最大的一行,得到
    jdid kfid psj qssj
    1 1 10 123
    1 1 12 124
    1 2 15 128
    1 2 19 129
    1 3 20 100  
    1 3 8 130
    2、再从余下的几行中选取psj最小的一行
    于是得到psj=12,这是最小的一行。
      

  6.   

    每个kfid只能有一行数据,这行数据为qssj<=129最大那一行
    如有qssj 分别为124 127 128 129,那么就找到129的那一行。
    我可能说的有些不准确,谢谢大家了。