本文是《使用SQL计算宝宝每次吃奶的时间间隔》的续篇,因为我工作繁忙,时常不能及时帮助媳妇儿记录,为了让不懂数据库的媳妇儿也可以自己用手机熟练操作。我继续做了一些修正和封装:

  • 1.给媳妇儿的手机下载一个terminal终端软件termius,实现只需打开app就可以连接到环境;
  • 2.跟媳妇儿进一步沟通需求,按她能够接受的使用习惯来修正并封装程序,原则是尽可能的简化操作。

先来看下改进后最终的使用效果:

--1.手机上打开termius软件,点击进入到终端,输入 h 可以看到所有命令的说明:
[oracle@jystdrac1 ~]$ h
**Command for Baby's feed_time:**
Usage:
v - View Today's Result.
vv <'mmdd'> - View one day's Result.
i - Insert a row using current time.
ii <'mmdd hh24:mi'> - Insert a row using input time.
d <id> - Delete a mistake row by id.
u <label> <id> - Update a mistake row by id.
h - Help --2.输入 v 可以看到今天的喂奶时间和间隔:
[oracle@jystdrac1 ~]$ v
View Today's Result: ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
53 12-15 01:00 N 140 2.33
54 12-15 04:08 N 188 3.13
55 12-15 07:35 N 207 3.45
56 12-15 10:40 N 185 3.08
69 12-15 13:16 N 156 2.6
70 12-15 14:32 N 76 1.27
82 12-15 17:14 N 163 2.71
83 12-15 19:15 N 121 2.01 8 rows selected. --3.输入 i 可以直接以当前系统时间插入一条数据,并显示插入后的结果:
[oracle@jystdrac1 ~]$ i
Insert a row using current time: 1 row created. Commit complete. View Today's Result: ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
53 12-15 01:00 N 140 2.33
54 12-15 04:08 N 188 3.13
55 12-15 07:35 N 207 3.45
56 12-15 10:40 N 185 3.08
69 12-15 13:16 N 156 2.6
70 12-15 14:32 N 76 1.27
82 12-15 17:14 N 163 2.71
83 12-15 19:15 N 121 2.01
94 12-15 23:02 N 227 3.78 9 rows selected. --4.输入 d <id> 可以删除id对应的那行记录,并显示删除后的结果:
[oracle@jystdrac1 ~]$ d 94
Delete a mistake row by id:
Enter value for id: old 1: delete from t_baby where id = &id
new 1: delete from t_baby where id = 94 1 row deleted. Commit complete. View Today's Result: ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
53 12-15 01:00 N 140 2.33
54 12-15 04:08 N 188 3.13
55 12-15 07:35 N 207 3.45
56 12-15 10:40 N 185 3.08
69 12-15 13:16 N 156 2.6
70 12-15 14:32 N 76 1.27
82 12-15 17:14 N 163 2.71
83 12-15 19:15 N 121 2.01 8 rows selected. --5.输入 u <label> <id> 可以更新指定id的label值,比如将id=55的记录label值修改为'L',代表这次喂奶量很少,不参与计算
[oracle@jystdrac1 ~]$ u l 55
Update a mistake row by id:
Enter value for label: Enter value for id: old 1: update t_baby set label = upper('&label') where id = &id
new 1: update t_baby set label = upper('l') where id = 55 1 row updated. Commit complete. View Today's Result: ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
53 12-15 01:00 N 140 2.33
54 12-15 04:08 N 188 3.13
56 12-15 10:40 N 392 6.53
69 12-15 13:16 N 156 2.6
70 12-15 14:32 N 76 1.27
82 12-15 17:14 N 163 2.71
83 12-15 19:15 N 121 2.01 7 rows selected. --6.输入 u <label> <id> 可以更新指定id的label值,比如将id=55的记录label值修改回'N',代表这次喂奶量正常,参与计算
[oracle@jystdrac1 ~]$ u n 55
Update a mistake row by id:
Enter value for label: Enter value for id: old 1: update t_baby set label = upper('&label') where id = &id
new 1: update t_baby set label = upper('n') where id = 55 1 row updated. Commit complete. View Today's Result: ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
53 12-15 01:00 N 140 2.33
54 12-15 04:08 N 188 3.13
55 12-15 07:35 N 207 3.45
56 12-15 10:40 N 185 3.08
69 12-15 13:16 N 156 2.6
70 12-15 14:32 N 76 1.27
82 12-15 17:14 N 163 2.71
83 12-15 19:15 N 121 2.01 8 rows selected. --7.输入 ii <'mmdd hh24:mi'> 可以插入指定日期和时间
[oracle@jystdrac1 ~]$ ii '1215 23:00'
Insert a row using input time(mmdd mi:ss) eg: 1215 10:00
Enter value for feed_time: old 1: insert into t_baby(id,feed_time) values(s1.nextval,to_date('&feed_time','mmdd hh24:mi'))
new 1: insert into t_baby(id,feed_time) values(s1.nextval,to_date('1215 23:00','mmdd hh24:mi')) 1 row created. Commit complete. View Today's Result: ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
53 12-15 01:00 N 140 2.33
54 12-15 04:08 N 188 3.13
55 12-15 07:35 N 207 3.45
56 12-15 10:40 N 185 3.08
69 12-15 13:16 N 156 2.6
70 12-15 14:32 N 76 1.27
82 12-15 17:14 N 163 2.71
83 12-15 19:15 N 121 2.01
95 12-15 23:00 N 225 3.74 9 rows selected. --8.删除id=95的这条测试记录
[oracle@jystdrac1 ~]$ d 95
Delete a mistake row by id:
Enter value for id: old 1: delete from t_baby where id = &id
new 1: delete from t_baby where id = 95 1 row deleted. Commit complete. View Today's Result: ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
53 12-15 01:00 N 140 2.33
54 12-15 04:08 N 188 3.13
55 12-15 07:35 N 207 3.45
56 12-15 10:40 N 185 3.08
69 12-15 13:16 N 156 2.6
70 12-15 14:32 N 76 1.27
82 12-15 17:14 N 163 2.71
83 12-15 19:15 N 121 2.01 8 rows selected. --9.使用 vv 'mmdd' 可以显示指定日期的喂奶间隔情况:
[oracle@jystdrac1 ~]$ vv 1214
View Today's Result:
Enter value for feed_time: Enter value for feed_time: old 2: from (select t.*, lag(feed_time) over(order by id) l_time from t_baby t where label <> 'L') where feed_time >= to_date('&feed_time','mmdd') and feed_time < to_date('&feed_time','mmdd') + 1
new 2: from (select t.*, lag(feed_time) over(order by id) l_time from t_baby t where label <> 'L') where feed_time >= to_date('1214','mmdd') and feed_time < to_date('1214','mmdd') + 1 ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
41 12-14 01:55 N 265 4.42
42 12-14 04:58 N 183 3.05
43 12-14 08:25 N 207 3.45
44 12-14 11:23 N 178 2.97
45 12-14 12:23 N 60 1
46 12-14 15:00 N 157 2.62
47 12-14 17:22 N 142 2.37
48 12-14 18:45 N 83 1.38
49 12-14 22:40 N 235 3.92 9 rows selected.

经过一番演示,媳妇儿的反馈是非常满意的,实际她最常用的还是v和i,非常方便,其他命令偶尔使用,其实只需记住h可以获取到帮助即可。下面将本次的修正和封装过程记录一下:

1.环境变量配置别名

为了简化操作,我将环境变量设置一些别名。

[oracle@jystdrac1 ~]$ cat ~/.bash_profile
# 这里省略原有环境变量内容,下面为在源文件基础上追加的内容:
# Alias for baby's feed_time:
alias h=/home/oracle/baby_readme.sh
alias v=/home/oracle/baby_view.sh
alias i=/home/oracle/baby_insert.sh
alias d=/home/oracle/baby_delete.sh
alias u=/home/oracle/baby_update.sh
alias ii=/home/oracle/baby_insert_diy.sh
alias vv=/home/oracle/baby_view_diy.sh

2.系统shell脚本

##baby_readme.sh

vi baby_readme.sh

#!/bin/bash
# script:baby_readme.sh
# version:1.01
#-------------------------------------------------------------
echo "**Command for Baby's feed_time:**"
echo "Usage:"
echo " v - View Today's Result."
echo " vv <'mmdd'> - View one day's Result."
echo " i - Insert a row using current time."
echo " ii <'mmdd hh24:mi'> - Insert a row using input time."
echo " d <id> - Delete a mistake row by id."
echo " u <label> <id> - Update a mistake row by id."
echo " h - Help"
#-------------------------------------------------------------

baby_view.sh

vi baby_view.sh

#!/bin/bash
# script:baby_view.sh
# version:1.01
#-------------------------------------------------------------
sqlplus -S test/test <<EOF
PROMPT View Today's Result:
@v3 EOF
#-------------------------------------------------------------

baby_insert.sh

vi baby_insert.sh

#!/bin/bash
# script:baby_insert.sh
# version:1.01
#-------------------------------------------------------------
sqlplus -S test/test <<EOF
PROMPT Insert a row using current time:
@i1 PROMPT View Today's Result:
@v3 EOF
#-------------------------------------------------------------

baby_delete.sh

vi baby_delete.sh

#!/bin/bash
# script:baby_delete.sh
# version:1.01
#-------------------------------------------------------------
sqlplus -S test/test <<EOF
PROMPT Delete a mistake row by id:
@d1
$1
commit; PROMPT View Today's Result:
@v3 EOF
#-------------------------------------------------------------

baby_insert_diy.sh

vi baby_insert_diy.sh

#!/bin/bash
# script:baby_insert_diy.sh
# version:1.01
#-------------------------------------------------------------
sqlplus -S test/test <<EOF
PROMPT Insert a row using input time(mmdd mi:ss) eg: 1215 10:00
@i2
$1
commit; PROMPT View Today's Result:
@v3 EOF
#-------------------------------------------------------------

baby_update.sh

vi baby_update.sh

#!/bin/bash
# script:baby_update.sh
# version:1.01
#-------------------------------------------------------------
sqlplus -S test/test <<EOF
PROMPT Update a mistake row by id:
@u1
$1
$2
commit; PROMPT View Today's Result:
@v3 EOF
#-------------------------------------------------------------

baby_view_diy.sh

vi baby_view_diy.sh

#!/bin/bash
# script:baby_view.sh
# version:1.01
#-------------------------------------------------------------
sqlplus -S test/test <<EOF
PROMPT View one day's Result:
@v4
$1
$1 EOF
#-------------------------------------------------------------

3.底层SQL文本

--echo "v - View Today's Result."
[oracle@jystdrac1 ~]$ cat v3.sql
SELECT
id,
to_char(feed_time, 'mm-dd hh24:mi') "FEED_TIME",
label,
round((feed_time - l_time) * 24 * 60) "LAG(min)",
round((feed_time - l_time) * 24, 2) "LAG(h)"
FROM
(
SELECT
t.*,
LAG(feed_time) OVER(ORDER BY id) l_time
FROM
t_baby t
WHERE
label <> 'L'
)
WHERE
feed_time >= trunc(sysdate)
/ -- echo " vv <'mmdd'> - View one day's Result."
[oracle@jystdrac1 ~]$ cat v4.sql
SELECT
id,
to_char(feed_time, 'mm-dd hh24:mi') "FEED_TIME",
label,
round((feed_time - l_time) * 24 * 60) "LAG(min)",
round((feed_time - l_time) * 24, 2) "LAG(h)"
FROM
(
SELECT
t.*,
LAG(feed_time) OVER(ORDER BY id) l_time
FROM
t_baby t
WHERE
label <> 'L'
)
WHERE
feed_time >= TO_DATE('&feed_time', 'mmdd')
AND feed_time < TO_DATE('&feed_time', 'mmdd') + 1
/ --echo "i - Insert a row using current time."
[oracle@jystdrac1 ~]$ cat i1.sql
insert into t_baby(id,feed_time) values(s1.nextval,sysdate)
/
commit
/ --echo "ii - Insert a row using input time."
[oracle@jystdrac1 ~]$ cat i2.sql
insert into t_baby(id,feed_time) values(s1.nextval,to_date('&feed_time','mmdd hh24:mi'))
/ --echo "d - Delete a mistake row by id. "
[oracle@jystdrac1 ~]$ cat d1.sql
delete from t_baby where id = &id
/ --echo "u - Update a mistake row by id."
[oracle@jystdrac1 ~]$ cat u1.sql
update t_baby set label = upper('&label') where id = &id
/

SQL文本独立出来也方便后续需求有变化时快速更改。

使用SQL计算宝宝每次吃奶的时间间隔(续)的更多相关文章

  1. 使用SQL计算宝宝每次吃奶的时间间隔(数据保障篇)

    目前程序从功能上其实已经完全满足客户(当然我这里的客户都是指媳妇儿^_^)需求,具体可参考: 使用SQL计算宝宝每次吃奶的时间间隔 使用SQL计算宝宝每次吃奶的时间间隔(续) 那么本篇 使用SQL计算 ...

  2. 使用SQL计算宝宝每次吃奶的时间间隔

    需求:媳妇儿最近担心宝宝的吃奶时间不够规律,网上说是正常平均3小时喂奶一次,让我记录下每次的吃奶时间,分析下实际是否偏差很大,好在下次去医院复查时反馈给医生. 此外,还要注意有时候哭闹要吃奶,而实际只 ...

  3. SQL 计算列

    SQL计算列,可以解决一般标量计算(数学计算,如ColumnA*ColumnB)的问题,而子查询计算(如select sum(salary) from tableOther where id=’ABC ...

  4. sql计算经纬度得出最近距离的公式

    sql计算经纬度得出最近距离的公式 //根据经纬度计算两点距离 mappoint //数据库已有字段,商家经纬度 实例:113.272148,23.147299 $lon = "" ...

  5. SQL计算时间差并排除周末

    SQL计算时间差并排除周末 CREATE FUNCTION DI_FN_GET_WorkDay (@begin DATETIME , @end DATETIME ) RETURNS int BEGIN ...

  6. 【HANA系列】SAP HANA SQL计算两个日期的差值

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL计算两个 ...

  7. 【HANA系列】SAP HANA SQL计算某日期是当月的第几天

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL计算某日 ...

  8. 【HANA系列】SAP HANA SQL计算某日期是当年的第几天

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL计算某日 ...

  9. Java工作流引擎节点接收人设置“按自定义SQL计算”系列讲解

    关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单  拖拽式表单 工作流系统CCBPM节点访问规则接收人规则 适配数据库: o ...

随机推荐

  1. tornado的使用-上传图片

    tornado的使用-上传图片

  2. 解决FirewallD is not running问题

    centos7 1.查看firewalld状态:systemctl status firewalld,如果是dead状态,即防火墙未开启. 2.开启防火墙systemctl start firewal ...

  3. 2019-10-16:渗透测试,基础学习,burpsuit学习,爆破的四种方式学习

    Burp Suite 是用于攻击web 应用程序的集成平台,包含了许多工具.Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程.所有工具都共享一个请求,并能处理对应的HTTP 消息 ...

  4. 2019-9-12:渗透测试,基础学习,Linux下用户管理笔记

    linus用户管理/etc/passwd 保存用户信息/etc/shadow 保存密码信息,第二部分 !表示密码没有设置 cat /etc/passwd | grep xxx:查看特定账户信息 use ...

  5. 《软件安装》centos 安装 mysql

    上期问题回顾 全球 IPv4 地址正式耗尽,IPv4地址大约42.9亿,按照理论来说,每一个联网的设备都需要IP地址,而现在全球联网设备远远不止42.9亿,那么,这么多设备是怎么处理联网的问题呢? 先 ...

  6. java 运算符&表达式

    1. java中,模运算符%可以获取整数除法的余数,同样适用于浮点类型数据.double y = 23.56; y%5;(即y mod 5 =3.56) [c/c++中,要求%两侧均为整数数据.] 2 ...

  7. Python实现简单框架及三大框架对比

    手撸web框架 简单的请求响应实现 要实现最简单的web框架,首先要对网络熟悉,首先HTTP协议是应用层的协议,只要我们给数据加上HTTP格式的响应报头,我们的数据就能基于socket进行实现了 im ...

  8. php-fpm的pool、php-fpm慢执行日志、open_basedir、php-fpm进程管理

    6月13日任务 12.21 php-fpm的pool12.22 php-fpm慢执行日志12.23 open_basedir12.24 php-fpm进程管理 12.21 php-fpm的pool p ...

  9. 洛谷P2085——最小函数值

    题目描述 有n个函数,分别为\(F_1,F_2,...,F_n\).定义\(F_i(x)=A_i*x^2+B_i*x+C_i (x∈N*)\).给定这些\(A_i.B_i和C_i\),请求出所有函数的 ...

  10. linux虚拟机中各服务端口及配置文件路径

    查询端口状况命令: netstat -an| grep 端口号 查询服务状态(服务是否开启)命令:systemctl  status 服务名 开启服务命令:systemctl  start  服务名 ...