如何在此查询中也包含当前提供的日期信息

Posted

技术标签:

【中文标题】如何在此查询中也包含当前提供的日期信息【英文标题】:How can I include current provided date information also in this query 【发布时间】:2016-03-25 21:22:12 【问题描述】:

根据这个查询,我在 1 天里收集最松散的数据

SELECT symbol_name,close_val,current_day,SUM(close_val-prevclose_val) AS toploosers   
FROM  historical_data
WHERE current_day BETWEEN DATE_SUB('2015-12-18', INTERVAL 1 DAY) AND '2015-12-18' 
GROUP BY symbol_name
ORDER BY toploosers ASC;

CREATE TABLE `historical_data` (
  `symbol_name` varchar(70) DEFAULT NULL,
  `current_day` date DEFAULT NULL,
  `open_val` decimal(15,2) DEFAULT NULL,
  `high_val` decimal(15,2) DEFAULT NULL,
  `low_val` decimal(15,2) DEFAULT NULL,
  `close_val` decimal(15,2) DEFAULT NULL,
  `last_val` decimal(15,2) DEFAULT NULL,
  `prevclose_val` decimal(15,2) DEFAULT NULL
);



INSERT INTO `historical_data` (`symbol_name`, `current_day`, `open_val`, `high_val`, `low_val`, `close_val`, `last_val`, `prevclose_val`) VALUES
    ('WOCKPHARMA', '2015-12-11', 1611.00, 1620.00, 1570.30, 1581.25, 1579.00, 1602.10),
    ('YESBANK', '2015-12-11', 709.00, 713.70, 672.25, 680.60, 683.45, 707.10),
    ('WOCKPHARMA', '2015-12-14', 1572.50, 1584.70, 1545.00, 1559.55, 1557.60, 1581.25),
    ('YESBANK', '2015-12-14', 679.10, 689.00, 668.00, 683.25, 683.65, 680.60),
    ('WOCKPHARMA', '2015-12-15', 1564.70, 1580.50, 1558.00, 1572.10, 1567.50, 1559.55),
    ('YESBANK', '2015-12-15', 688.00, 694.20, 675.75, 691.35, 688.25, 683.25),
    ('WOCKPHARMA', '2015-12-16', 1581.50, 1617.90, 1578.00, 1587.15, 1589.00, 1572.10),
    ('YESBANK', '2015-12-16', 697.00, 710.60, 694.25, 698.55, 699.15, 691.35),
    ('WOCKPHARMA', '2015-12-17', 1596.10, 1642.00, 1576.05, 1628.20, 1636.80, 1587.15),
    ('YESBANK', '2015-12-17', 708.00, 723.75, 705.70, 721.10, 720.00, 698.55),
    ('WOCKPHARMA', '2015-12-18', 1630.00, 1654.85, 1620.30, 1627.55, 1631.00, 1628.20),
    ('YESBANK', '2015-12-18', 717.90, 727.45, 713.60, 718.70, 720.20, 721.10);

我得到的结果是

symbol_name      close_val  current_day                        toploosers

YESBANK     721.1   December, 17 2015 00:00:00  20.15
WOCKPHARMA  1628.2  December, 17 2015 00:00:00  40.4

如何获取当前日期 (2015-12-18) close_val 也??

http://sqlfiddle.com/#!9/3693b/4

【问题讨论】:

【参考方案1】:

试试这个:

SELECT symbol_name,
       Sum(Case when current_day = '2015-12-18' then close_val else 0 end) as close_val,
       Max(Case when current_day = '2015-12-18' then current_day else null end) as current_day,
       Sum(Case when current_day =  DATE_SUB('2015-12-18', INTERVAL 1 DAY) then close_val else 0 end) as close_val,
       SUM(close_val-prevclose_val) AS toploosers 
FROM historical_data 
WHERE current_day BETWEEN DATE_SUB('2015-12-18', INTERVAL 1 DAY) AND '2015-12-18' 
GROUP BY symbol_name 
ORDER BY toploosers ASC;

【讨论】:

谢谢,但我也想在查询中获取当天的收盘价以及前几天的收盘价, 您提供的查询只是获取我当前日期的收盘价,我想包括收盘价(当前日期和间隔日期)。 工作完美,我不能要求更多,再次感谢....现在我可以继续我的 java 和 javascript 工作.. :) 能否保持close_val的名字不同?? 是的,您可以根据需要提供别名

以上是关于如何在此查询中也包含当前提供的日期信息的主要内容,如果未能解决你的问题,请参考以下文章

如何设置包含当前日期的日期范围的 BigQuery 查询

如何从 unixtime(integer) 列包含当前日期而不考虑时间的表中选择记录?

如何按日期限制查询

如何在 Bigquery¿ 中查询自动日期?

MongoDB如何优化查询性能?

sql如何按日期中的月份查询