197. Rising Temperature#1

Solution#1

# Write your MySQL query statement below
SELECT T.Id FROM Weather AS T 
INNER JOIN Weather AS Y 
ON T.Date = Y.Date + interval 1 day
AND T.Temperature > Y.Temperature;

Problem#1
1. 题目没仔细思考,Id大不代表天数大
2. Date的操作没概念(注1)


mysql中获取一天、一周、一月时间数据的各种sql语句写法
今天抽时间整理了一篇mysql中与天、周、月有关的时间数据的sql语句的各种写法,部分是收集资料,全部手工整理,自己学习的同时,分享给大家,并首先默认创建一个表、插入2条数据,便于部分数据的测试,其中部分名词或函数进行了解释说明。直入主题!
创建表:
复制代码 代码如下:

create table if not exists t
(
id int,
addTime datetime default ‘0000-00-00 00:00:00′
)
添加两条初始数据:
insert t values(1, ‘2012-07-12 21:00:00′);
insert t values(2, ‘2012-07-22 21:00:00′);
一、当天或当日插入的数据:
1、传统对比判断:SELECT * FROM t WHERE DATE_FORMAT(addTime,’%Y-%m-%d’) = date_format(now(),’%Y-%m-%d’)”);
2、第一点的简写:SELECT * FROM t WHERE addTime >= date_format(NOW(),’%Y-%m-%d’);
3、利用函数判断:SELECT * FROM t WHERE DATEDIFF(addTime,NOW()) =0;//推荐此方法
4、利用时间戳判断:SELECT * FROM t WHERE addTime BETWEEN (UNIX_TIMESTAMP(now()-86440)) AND now();
注:返回当天时间的mysql函数有CURDATE()、CURRENT_DATE()、CURRENT_DATE、NOW()几种;其中NOW()获取的日期格式为0000-00-00 00:00:00的时间;CURDATE()、CURRENT_DATE()、CURRENT_DATE是获取日期格式为0000-00-00的时间,所以返回的时间无时分秒;
二、当月的相关数据写法:
1、今天是当月的第几天:SELECT DAYOFMONTH( NOW( ) );
2、获取当月的第一天时间:SELECT DATA_SUB( NOW(), INTERVAL DAYOFMONTH(NOW()) – 1 DAY);
日期运算函数,句型:date_add(date,INTERVAL expr type)和date_sub(date,INTERVAL expr type)
date为一个datetime或date值,可当作起始时间,expr为一个表达式,用来指定增加或减少的时间间隔数目,可为一个字符串–若为负值,则在表达式前加个”-“符号。type为关键词,它表示了表达式被解释的方式,通常用年(year)、月(month)、日(day)、周(week)等。
INTERVAL的用户说明:
1、当函数使用时,即INTERVAL(),为比较函数,如:INTERVAL(10,1,3,5,7); 结果为4;
原理:10为被比较数,后面1,3,5,7为比较数,将后面四个依次与10比较,看后面数字组有多少个少于10,则返回其个数。前提是后面数字组为从小到大排列,否则返回结果0。
2、当关键词使用时,表示为设置时间间隔,常用在date_add()与date_sub()函数里,如:INTERVAL 1 DAY ,解释为将时间间隔设置为1天。
弄清楚了上面几个重要的日期运算函数,下面再来一个混合的日期运算。
3、上个月的第一天时间:SELECT DATE_SUB( DATE_SUB( NOW( ) , INTERVAL DAYOFMONTH( NOW( ) ) -1 DAY ) , INTERVAL 1 MONTH ); 是不是一目了然了!
三、当周的相关数据写法:
1、获取今天是一周第几天或星期几:SELECT WEEKDAY(now());返回的是数字:0为周一,6为周日
2、获取本周的第一天日期:SELECT DATE_SUB(now(),INTERVAL WEEKDAY(now()) day);或SELECT DATE_ADD(now(),INTERVAL -WEEKDAY(now()) day);或 SELECT CURDATE( ) – WEEKDAY( CURDATE( ) );
3、再写一个上周的第一天至现在的数据:(以表t为数据表)
SELECT * FROM t WHERE addTime >= date_format(date_sub(date_sub(now(), INTERVAL WEEKDAY(NOW()) DAY), INTERVAL 1 WEEK), ‘%Y-%m-%d’);是不是有些感觉了!
注:若你是以时间戳保存的时间字段,那么请用from_unixtime()函数转换为时间格式,如:from_unixtime($timestamp)
四、Mysql中将日期转为时间戳
前三点的方法,讲的都是将日期转为相应时间常量,并没有提到时间戳与时间的转换,这里把它写出来,
1、时间戳转日期,方法是select from_unixtime(1336542121);
2、日期转时间戳,方法是:select unix_timestamp(‘2013-04-08′);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用STM32CubeIDE编写的示例代码: ```c #include "stm32l4xx_hal.h" #include "stdio.h" /* Define I2C interface */ #define I2C_HANDLER hi2c1 #define I2C_ADDRESS 0x48 /* Define TMP102 registers */ #define TEMP_REGISTER 0x00 #define CONFIG_REGISTER 0x01 /* Define TMP102 configuration bits */ #define SHUTDOWN_BIT 0x0100 #define SLEEP_BIT 0x0400 /* Define ADC interface */ #define ADC_HANDLER hadc1 /* Define ADC channel */ #define ADC_CHANNEL ADC_CHANNEL_5 /* Define external interrupt pin */ #define EXTI_PIN GPIO_PIN_0 #define EXTI_PORT GPIOA /* Define external interrupt handler */ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == EXTI_PIN) { // Handle external interrupt } } int main(void) { HAL_Init(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_I2C1_CLK_ENABLE(); __HAL_RCC_ADC_CLK_ENABLE(); /* Initialize I2C interface */ I2C_HandleTypeDef hi2c1; hi2c1.Instance = I2C1; hi2c1.Init.Timing = 0x00C0EAFF; hi2c1.Init.OwnAddress1 = 0; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; hi2c1.Init.OwnAddress2 = 0; hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK; hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; if (HAL_I2C_Init(&hi2c1) != HAL_OK) { Error_Handler(); } /* Initialize ADC interface */ ADC_HandleTypeDef hadc1; hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.ScanConvMode = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } /* Configure GPIO pin for external interrupt */ GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = EXTI_PIN; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(EXTI_PORT, &GPIO_InitStruct); /* Enable external interrupt */ HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); /* Enable ADC channel */ ADC_ChannelConfTypeDef sConfig; sConfig.Channel = ADC_CHANNEL; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /* Configure TMP102 */ uint8_t config[2]; config[0] = CONFIG_REGISTER; config[1] = SHUTDOWN_BIT | SLEEP_BIT; if (HAL_I2C_Master_Transmit(&I2C_HANDLER, I2C_ADDRESS, (uint8_t *)config, 2, HAL_MAX_DELAY) != HAL_OK) { Error_Handler(); } /* Read temperature from TMP102 */ uint8_t temp_reg[2]; temp_reg[0] = TEMP_REGISTER; uint16_t temp_raw; if (HAL_I2C_Master_Transmit(&I2C_HANDLER, I2C_ADDRESS, (uint8_t *)temp_reg, 1, HAL_MAX_DELAY) != HAL_OK) { Error_Handler(); } if (HAL_I2C_Master_Receive(&I2C_HANDLER, I2C_ADDRESS, (uint8_t *)&temp_raw, 2, HAL_MAX_DELAY) != HAL_OK) { Error_Handler(); } float temperature = (float)((int16_t)temp_raw >> 4) * 0.0625; /* Read ADC value */ if (HAL_ADC_Start(&ADC_HANDLER) != HAL_OK) { Error_Handler(); } if (HAL_ADC_PollForConversion(&ADC_HANDLER, HAL_MAX_DELAY) != HAL_OK) { Error_Handler(); } uint16_t adc_value = HAL_ADC_GetValue(&ADC_HANDLER); /* Average temperature and ADC value */ float temperature_sum = 0; uint32_t adc_sum = 0; for (int i = 0; i < 10; i++) { /* Read temperature from TMP102 */ if (HAL_I2C_Master_Transmit(&I2C_HANDLER, I2C_ADDRESS, (uint8_t *)temp_reg, 1, HAL_MAX_DELAY) != HAL_OK) { Error_Handler(); } if (HAL_I2C_Master_Receive(&I2C_HANDLER, I2C_ADDRESS, (uint8_t *)&temp_raw, 2, HAL_MAX_DELAY) != HAL_OK) { Error_Handler(); } temperature_sum += (float)((int16_t)temp_raw >> 4) * 0.0625; /* Read ADC value */ if (HAL_ADC_Start(&ADC_HANDLER) != HAL_OK) { Error_Handler(); } if (HAL_ADC_PollForConversion(&ADC_HANDLER, HAL_MAX_DELAY) != HAL_OK) { Error_Handler(); } adc_sum += HAL_ADC_GetValue(&ADC_HANDLER); } float average_temperature = temperature_sum / 10; uint32_t average_adc_value = adc_sum / 10; /* Enter sleep mode */ HAL_PWR_EnableSleepOnExit(); HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); while (1) { /* Main loop */ } } ``` 这个示例代码使用STM32CubeIDE开发工具编写,用于读取TMP102温度传感器和ADC电流传感器的值,并实现了外部中断。首先,我们初始化了I2C和ADC的接口,并配置了GPIO引脚用于外部中断。然后,我们配置了TMP102,以便在读取温度值之前将其置于关机和睡眠模式。接下来,我们读取了一次温度值和ADC值,并对它们进行平均化。最后,我们进入了睡眠模式,直到外部中断触发为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值