刷卡,取每一个卡号的最后三次记录的问题

 

数据库:MSSQL

表:
ICNO(卡号)    DATE(日期)     BALANCE(余额)  ICLINENO(卡流水号)
0001           2005/10/01      100            10
0001           2005/10/02       99            11
0001           2005/10/02       98            12
0002           2005/10/01       60            30 
0003           2005/10/01       60            30 
0004           2005/10/02       70            40 
0001           2005/10/03       97            13 
0002           2005/10/02       59            31 
0001           2005/10/04       96            14 
0002           2005/10/02       58            32 
0003           2005/10/02       59            31
0002           2005/10/03       57            33
要求结果:
ICNO(卡号)    DATE(日期)     BALANCE(余额)  ICLINENO(卡流水号)
0001           2005/10/02       98            12
0001           2005/10/03       97            13
0001           2005/10/04       96            14
0002           2005/10/02       59            31
0002           2005/10/02       58            32
0002           2005/10/03       57            33
0003           2005/10/01       60            30
0003           2005/10/02       59            31
0004           2005/10/02       70            40
想要每一个卡号(ICNO)的最后三次记录,记录多于三次就取最后三次记录
-----------------------------------
create table #tab (ICNO varchar(8) , DATE datetime,     BALANCE float ,ICLINENO int )
go
insert into #tab values('0001',           '2005/10/01',      100,           10)
insert into #tab values('0001',           '2005/10/02',       99,            11)
insert into #tab values('0001',           '2005/10/02',       98,            12)
insert into #tab values('0002',           '2005/10/01',       60,            30)
insert into #tab values('0003',           '2005/10/01',       60,            30) 
insert into #tab values('0004',           '2005/10/02',       70,            40) 
insert into #tab values('0001',           '2005/10/03',       97,            13) 
insert into #tab values('0002',           '2005/10/02',       59,            31) 
insert into #tab values('0001',           '2005/10/04',       96,            14) 
insert into #tab values('0002',           '2005/10/02',       58,            32) 
insert into #tab values('0003',           '2005/10/02',       59,            31)
insert into #tab values('0002',           '2005/10/03',       57,            33)
go
select * from #tab t
where (select count(DATE) from #tab where ICNO=t.ICNO and ICLINENO>=t.ICLINENO)<=3
order by t.ICNO,t.DATE
-----------------------------------
注:本来感觉这问题和我前几天做的那个“取前几名的例子”问题一样呢。后来发现有ICLINENO(卡流水号)这个字段,这样出现重复日期的问题就可以处理了,解决了Sybase下无TOP的问题。看来对于某些需求,加个唯一(或者在组内唯一)的字段还是很有必要的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,蓝牙门锁刷卡功能一般需要硬件设备的支持。在使用C语言编写蓝牙门锁刷卡功能时,需要使用蓝牙模块进行通信,同时需要使用开发板等硬件设备来控制门锁。以下是一个简单的蓝牙门锁刷卡功能的C语言代码示例,供参考: ``` #include <stdio.h> #include <string.h> // 定义蓝牙模块的串口通信端口 #define BLUETOOTH_PORT "/dev/ttyS0" // 定义门锁控制的GPIO端口号 #define DOOR_LOCK_GPIO 18 int main() { // 初始化蓝牙模块的串口通信 int bluetooth_fd = open(BLUETOOTH_PORT, O_RDWR | O_NOCTTY | O_NDELAY); if (bluetooth_fd < 0) { printf("Failed to open bluetooth port\n"); return -1; } // 初始化门锁控制的GPIO if (gpioExport(DOOR_LOCK_GPIO) == -1) { printf("Failed to export GPIO %d\n", DOOR_LOCK_GPIO); return -1; } if (gpioDirection(DOOR_LOCK_GPIO, OUTPUT_PIN) == -1) { printf("Failed to set GPIO %d direction\n", DOOR_LOCK_GPIO); return -1; } // 开始监听蓝牙模块的数据 char buffer[1024]; while (1) { // 从蓝牙模块读数据 int len = read(bluetooth_fd, buffer, sizeof(buffer)); if (len > 0) { // 判断是否是刷卡指令 if (strncmp(buffer, "unlock", 6) == 0) { // 控制门锁打开 gpioSetValue(DOOR_LOCK_GPIO, HIGH); sleep(3); gpioSetValue(DOOR_LOCK_GPIO, LOW); } } } // 关闭蓝牙模块的串口通信 close(bluetooth_fd); // 关闭门锁控制的GPIO gpioUnexport(DOOR_LOCK_GPIO); return 0; } ``` 需要注意的是,上述代码仅为示例,实际使用时需要根据具体硬件设备的接口和控制方式进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值